Files
gerrit/fix_email.sh

101 lines
2.7 KiB
Bash
Raw Permalink Normal View History

2025-12-22 17:12:39 +08:00
#!/bin/bash
# 修复 Git 提交记录中的邮箱地址
# 将 noreply@gitee.com 替换为已注册的邮箱
echo "=========================================="
echo "修复 Git 提交记录中的邮箱地址"
echo "=========================================="
echo ""
# 检查是否在 Git 仓库中
if [ ! -d .git ]; then
echo "❌ 错误:当前目录不是 Git 仓库"
exit 1
fi
# 检查是否有未提交的更改
if [ -n "$(git status --porcelain)" ]; then
echo "⚠️ 警告:检测到未提交的更改"
echo "建议先提交或暂存更改后再执行此脚本"
read -p "是否继续?(y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# 配置信息
OLD_EMAIL="noreply@gitee.com"
CORRECT_NAME="renjianbo"
CORRECT_EMAIL="263303411@qq.com"
echo "将修改以下邮箱地址:"
echo " 旧邮箱: $OLD_EMAIL"
echo " 新邮箱: $CORRECT_EMAIL"
echo " 作者名: $CORRECT_NAME"
echo ""
# 检查是否有使用旧邮箱的提交
COMMITS_WITH_OLD_EMAIL=$(git log --format='%H' --author="$OLD_EMAIL" | wc -l)
if [ "$COMMITS_WITH_OLD_EMAIL" -eq 0 ]; then
echo "✅ 没有找到使用 $OLD_EMAIL 的提交,无需修改"
exit 0
fi
echo "找到 $COMMITS_WITH_OLD_EMAIL 个使用旧邮箱的提交"
echo ""
# 创建备份分支
BACKUP_BRANCH="backup-$(date +%Y%m%d-%H%M%S)"
echo "创建备份分支: $BACKUP_BRANCH"
git branch "$BACKUP_BRANCH"
echo "✅ 备份完成"
echo ""
# 执行批量修改
echo "开始批量修改提交记录..."
echo "这可能需要一些时间,请耐心等待..."
echo ""
git filter-branch -f --env-filter "
if [ \"\$GIT_COMMITTER_EMAIL\" = \"$OLD_EMAIL\" ]
then
export GIT_COMMITTER_NAME=\"$CORRECT_NAME\"
export GIT_COMMITTER_EMAIL=\"$CORRECT_EMAIL\"
fi
if [ \"\$GIT_AUTHOR_EMAIL\" = \"$OLD_EMAIL\" ]
then
export GIT_AUTHOR_NAME=\"$CORRECT_NAME\"
export GIT_AUTHOR_EMAIL=\"$CORRECT_EMAIL\"
fi
" --tag-name-filter cat -- --branches --tags
if [ $? -eq 0 ]; then
echo ""
echo "✅ 修改完成!"
echo ""
echo "验证结果:"
REMAINING=$(git log --format='%H' --author="$OLD_EMAIL" | wc -l)
if [ "$REMAINING" -eq 0 ]; then
echo "✅ 所有提交的邮箱地址已成功修改"
else
echo "⚠️ 仍有 $REMAINING 个提交使用旧邮箱"
fi
echo ""
echo "下一步:"
echo " 1. 检查修改结果git log --format='%an <%ae>' | head -10"
echo " 2. 推送到 Gerritgit push gerrit HEAD:refs/for/master"
echo ""
echo "如果需要恢复,可以使用:"
echo " git reset --hard $BACKUP_BRANCH"
else
echo ""
echo "❌ 修改失败"
echo "可以恢复备份git reset --hard $BACKUP_BRANCH"
exit 1
fi