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