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
|
||
|
||
|