first commit
This commit is contained in:
91
fix_unique_changeid.sh
Normal file
91
fix_unique_changeid.sh
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 为所有提交生成唯一 Change-Id 的脚本
|
||||
|
||||
echo "=========================================="
|
||||
echo "为所有提交生成唯一的 Change-Id"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
cd /d/zhini/zhini_im || exit 1
|
||||
|
||||
# 1. 确保 hook 已安装
|
||||
echo "步骤 1: 确保 commit-msg hook 已安装..."
|
||||
mkdir -p .git/hooks
|
||||
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg 2>/dev/null
|
||||
chmod +x .git/hooks/commit-msg
|
||||
echo "✅ Hook 已安装"
|
||||
echo ""
|
||||
|
||||
# 2. 创建备份
|
||||
echo "步骤 2: 创建备份分支..."
|
||||
BACKUP_BRANCH="backup-$(date +%Y%m%d-%H%M%S)"
|
||||
git branch "$BACKUP_BRANCH"
|
||||
echo "✅ 备份分支: $BACKUP_BRANCH"
|
||||
echo ""
|
||||
|
||||
# 3. 检查当前有多少个提交
|
||||
TOTAL_COMMITS=$(git rev-list --count HEAD)
|
||||
echo "步骤 3: 找到 $TOTAL_COMMITS 个提交需要处理"
|
||||
echo ""
|
||||
|
||||
# 4. 为所有提交生成唯一的 Change-Id
|
||||
echo "步骤 4: 为所有提交生成唯一的 Change-Id..."
|
||||
echo "这可能需要一些时间,请耐心等待..."
|
||||
echo ""
|
||||
|
||||
# 使用 filter-branch,为每个提交生成基于其唯一信息的 Change-Id
|
||||
git filter-branch -f --msg-filter '
|
||||
# 读取原始提交信息
|
||||
ORIGINAL_MSG=$(cat)
|
||||
|
||||
# 移除所有旧的 Change-Id 行
|
||||
CLEAN_MSG=$(echo "$ORIGINAL_MSG" | grep -v "^Change-Id:")
|
||||
|
||||
# 输出清理后的提交信息(去除末尾多余空行)
|
||||
echo "$CLEAN_MSG" | sed -e :a -e "/^\$/{\$!N;ba}" -e "s/\n\$//"
|
||||
|
||||
# 为当前提交生成唯一的 Change-Id
|
||||
# 使用提交的完整 SHA1(每个提交的 SHA1 都是唯一的)
|
||||
COMMIT_SHA=$(git rev-parse HEAD)
|
||||
|
||||
# 直接使用 SHA1 作为 Change-Id(SHA1 本身就是唯一的)
|
||||
# Change-Id 格式:I + 40位十六进制
|
||||
CHANGE_ID="I${COMMIT_SHA}"
|
||||
|
||||
echo ""
|
||||
echo "Change-Id: $CHANGE_ID"
|
||||
' --tag-name-filter cat -- --branches --tags
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo ""
|
||||
echo "✅ Change-Id 生成完成!"
|
||||
echo ""
|
||||
|
||||
# 验证所有 Change-Id 都是唯一的
|
||||
echo "步骤 5: 验证 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 都是唯一的"
|
||||
else
|
||||
echo "⚠️ 发现重复的 Change-Id:"
|
||||
echo "$DUPLICATES"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " git push gerrit HEAD:refs/for/master"
|
||||
echo ""
|
||||
echo "如果需要恢复,可以使用:"
|
||||
echo " git reset --hard $BACKUP_BRANCH"
|
||||
else
|
||||
echo ""
|
||||
echo "❌ 生成 Change-Id 失败"
|
||||
echo "可以恢复备份:git reset --hard $BACKUP_BRANCH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user