Files
gerrit/fix_email.sh
2025-12-22 17:12:39 +08:00

101 lines
2.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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