92 lines
2.6 KiB
Bash
92 lines
2.6 KiB
Bash
#!/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
|
||
|
||
|