first commit
This commit is contained in:
134
add_changeid.sh
Normal file
134
add_changeid.sh
Normal file
@@ -0,0 +1,134 @@
|
||||
#!/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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user