Files
gerrit/正确修复Change-Id.sh
2025-12-22 17:12:39 +08:00

84 lines
2.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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