135 lines
3.7 KiB
Bash
135 lines
3.7 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
# 为所有 Git 提交添加 Change-Id 的脚本
|
|||
|
|
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo "为所有提交添加 Change-Id"
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查是否在 Git 仓库中
|
|||
|
|
if [ ! -d .git ]; then
|
|||
|
|
echo "❌ 错误:当前目录不是 Git 仓库"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 步骤 1:安装 commit-msg hook
|
|||
|
|
echo "步骤 1: 安装 commit-msg hook..."
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
GIT_DIR=$(git rev-parse --git-dir)
|
|||
|
|
HOOK_PATH="$GIT_DIR/hooks/commit-msg"
|
|||
|
|
|
|||
|
|
# 尝试使用 scp 下载
|
|||
|
|
echo "尝试使用 SCP 下载 hook..."
|
|||
|
|
scp -p -P 29418 renjianbo@101.43.95.130:hooks/commit-msg "$HOOK_PATH" 2>/dev/null
|
|||
|
|
|
|||
|
|
# 如果 scp 失败,使用 curl
|
|||
|
|
if [ ! -f "$HOOK_PATH" ] || [ ! -x "$HOOK_PATH" ]; then
|
|||
|
|
echo "SCP 失败,尝试使用 curl..."
|
|||
|
|
mkdir -p "$GIT_DIR/hooks"
|
|||
|
|
curl -o "$HOOK_PATH" http://101.43.95.130:8080/tools/hooks/commit-msg 2>/dev/null
|
|||
|
|
chmod +x "$HOOK_PATH"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [ -f "$HOOK_PATH" ] && [ -x "$HOOK_PATH" ]; then
|
|||
|
|
echo "✅ commit-msg hook 安装成功"
|
|||
|
|
else
|
|||
|
|
echo "❌ commit-msg hook 安装失败"
|
|||
|
|
echo "请手动下载:"
|
|||
|
|
echo " curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg"
|
|||
|
|
echo " chmod +x .git/hooks/commit-msg"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 步骤 2:检查有多少提交缺少 Change-Id
|
|||
|
|
echo "步骤 2: 检查缺少 Change-Id 的提交..."
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
MISSING_COUNT=0
|
|||
|
|
git log --format='%H' | while read commit; do
|
|||
|
|
if ! git log -1 --format='%B' "$commit" | grep -q "^Change-Id:"; then
|
|||
|
|
MISSING_COUNT=$((MISSING_COUNT + 1))
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# 由于管道,MISSING_COUNT 在子 shell 中,需要重新计算
|
|||
|
|
MISSING_COUNT=$(git log --format='%H' | while read commit; do
|
|||
|
|
if ! git log -1 --format='%B' "$commit" | grep -q "^Change-Id:"; then
|
|||
|
|
echo "1"
|
|||
|
|
fi
|
|||
|
|
done | wc -l)
|
|||
|
|
|
|||
|
|
if [ "$MISSING_COUNT" -eq 0 ]; then
|
|||
|
|
echo "✅ 所有提交都已包含 Change-Id"
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "找到 $MISSING_COUNT 个缺少 Change-Id 的提交"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 步骤 3:创建备份
|
|||
|
|
BACKUP_BRANCH="backup-$(date +%Y%m%d-%H%M%S)"
|
|||
|
|
echo "步骤 3: 创建备份分支: $BACKUP_BRANCH"
|
|||
|
|
git branch "$BACKUP_BRANCH"
|
|||
|
|
echo "✅ 备份完成"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 步骤 4:为所有提交添加 Change-Id
|
|||
|
|
echo "步骤 4: 为所有提交添加 Change-Id..."
|
|||
|
|
echo "这可能需要一些时间,请耐心等待..."
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 使用 git filter-branch 为所有提交添加 Change-Id
|
|||
|
|
git filter-branch -f --msg-filter '
|
|||
|
|
# 读取原始提交信息
|
|||
|
|
cat
|
|||
|
|
|
|||
|
|
# 如果提交信息中没有 Change-Id,添加一个
|
|||
|
|
if ! grep -q "^Change-Id:"; then
|
|||
|
|
# 生成 Change-Id(基于提交的 SHA1)
|
|||
|
|
# 使用 git hash-object 生成一个唯一的 ID
|
|||
|
|
COMMIT_INFO=$(git cat-file commit HEAD)
|
|||
|
|
CHANGE_ID_BASE=$(echo -n "$COMMIT_INFO" | git hash-object --stdin)
|
|||
|
|
CHANGE_ID="I${CHANGE_ID_BASE:0:40}"
|
|||
|
|
echo ""
|
|||
|
|
echo "Change-Id: $CHANGE_ID"
|
|||
|
|
fi
|
|||
|
|
' --tag-name-filter cat -- --branches --tags
|
|||
|
|
|
|||
|
|
if [ $? -eq 0 ]; then
|
|||
|
|
echo ""
|
|||
|
|
echo "✅ Change-Id 添加完成!"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 验证
|
|||
|
|
echo "验证结果:"
|
|||
|
|
REMAINING=$(git log --format='%H' | while read commit; do
|
|||
|
|
if ! git log -1 --format='%B' "$commit" | grep -q "^Change-Id:"; then
|
|||
|
|
echo "1"
|
|||
|
|
fi
|
|||
|
|
done | wc -l)
|
|||
|
|
|
|||
|
|
if [ "$REMAINING" -eq 0 ]; then
|
|||
|
|
echo "✅ 所有提交都已包含 Change-Id"
|
|||
|
|
else
|
|||
|
|
echo "⚠️ 仍有 $REMAINING 个提交缺少 Change-Id"
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
|