101 lines
2.7 KiB
Bash
101 lines
2.7 KiB
Bash
#!/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. 推送到 Gerrit:git 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
|
||
|
||
|