84 lines
2.3 KiB
Bash
84 lines
2.3 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
# 正确修复 Change-Id:每个提交使用自己的 SHA1
|
|||
|
|
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo "正确修复 Change-Id - 每个提交使用自己的 SHA1"
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
cd /d/zhini/zhini_im || exit 1
|
|||
|
|
|
|||
|
|
# 1. 清理备份
|
|||
|
|
echo "步骤 1: 清理 filter-branch 备份..."
|
|||
|
|
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d 2>/dev/null || true
|
|||
|
|
echo "✅ 清理完成"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 2. 创建新备份
|
|||
|
|
echo "步骤 2: 创建备份..."
|
|||
|
|
BACKUP_BRANCH="backup-$(date +%Y%m%d-%H%M%S)"
|
|||
|
|
git branch "$BACKUP_BRANCH"
|
|||
|
|
echo "✅ 备份分支: $BACKUP_BRANCH"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 3. 修复 Change-Id
|
|||
|
|
echo "步骤 3: 为每个提交生成唯一的 Change-Id..."
|
|||
|
|
echo "关键:使用 \$GIT_COMMIT 环境变量(正在处理的提交的 SHA1)"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 设置环境变量以消除警告
|
|||
|
|
export FILTER_BRANCH_SQUELCH_WARNING=1
|
|||
|
|
|
|||
|
|
git filter-branch -f --msg-filter '
|
|||
|
|
# 读取原始提交信息
|
|||
|
|
ORIGINAL=$(cat)
|
|||
|
|
|
|||
|
|
# 移除旧的 Change-Id
|
|||
|
|
CLEAN=$(echo "$ORIGINAL" | grep -v "^Change-Id:" | sed -e :a -e "/^\$/{\$!N;ba}" -e "s/\n\$//")
|
|||
|
|
|
|||
|
|
# 输出清理后的提交信息
|
|||
|
|
echo "$CLEAN"
|
|||
|
|
|
|||
|
|
# 关键:使用 $GIT_COMMIT 环境变量,它包含正在被处理的提交的 SHA1
|
|||
|
|
# 而不是使用 git rev-parse HEAD(那会返回当前 HEAD)
|
|||
|
|
CURRENT_COMMIT="${GIT_COMMIT}"
|
|||
|
|
|
|||
|
|
# 为当前提交生成唯一的 Change-Id
|
|||
|
|
CHANGE_ID="I${CURRENT_COMMIT}"
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "Change-Id: $CHANGE_ID"
|
|||
|
|
' --tag-name-filter cat -- --branches --tags
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo ""
|
|||
|
|
echo "✅ Change-Id 修复完成!"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 验证
|
|||
|
|
echo "步骤 4: 验证 Change-Id 唯一性..."
|
|||
|
|
DUPLICATES=$(git log --format='%H' | while read commit; do
|
|||
|
|
git log -1 --format='%B' "$commit" | grep "^Change-Id:" | head -1 | cut -d' ' -f2
|
|||
|
|
done | sort | uniq -d)
|
|||
|
|
|
|||
|
|
if [ -z "$DUPLICATES" ]; then
|
|||
|
|
echo "✅ 所有 Change-Id 都是唯一的!"
|
|||
|
|
echo ""
|
|||
|
|
echo "现在可以推送:"
|
|||
|
|
echo " git push gerrit HEAD:refs/for/master"
|
|||
|
|
else
|
|||
|
|
echo "⚠️ 仍有重复的 Change-Id:"
|
|||
|
|
echo "$DUPLICATES"
|
|||
|
|
echo ""
|
|||
|
|
echo "请检查并重试"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo ""
|
|||
|
|
echo "❌ 修复失败"
|
|||
|
|
echo "可以恢复备份:git reset --hard $BACKUP_BRANCH"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
|