git - 如何使用过滤器分支更改多个提交的提交作者?

标签 git

我正在使用此 link 中的此脚本来编辑所有提交中的作者信息。

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

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

但是,我收到以下错误(警告?):
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

我也检查了日志。作者信息没有改变。我在这里做错了什么?

更新: 正如 @elpiekay 所提到的,-f 标志使脚本工作。

但是谁能解释错误日志本身?为什么提到备份?我以前从未做过任何备份(不确定错误日志中引用了什么备份)

最佳答案

实际上,更好的做法是:

  • 对新克隆的存储库执行过滤器
  • 不再使用 git filter-branch,其中 is declared (as of Git 2.24, Q4 2019) as somewhat deprecated.

  • 您现在可以改用它可能的后继者: newren/git-filter-repo (在 Python 中)及其 example section :
    cd repo
    git filter-repo --mailmap my-mailmap
    
    使用 my-mailmap :
    Correct Name <correct@email.com> <old@email.com>
    
    这将替换任何使用 <old@email.com> 的人所做的任何提交的作者姓名和电子邮件
    有关该映射文件的确切语法,请参阅 git mailmap

    关于git - 如何使用过滤器分支更改多个提交的提交作者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58263216/

    相关文章:

    windows - Windows上使用Git Bash时,如何避免每次都输入解密私钥的密码?

    ruby - 坚固的存储库实例是线程安全的吗?

    git - 如何取消目录?

    git 用远程版本替换本地版本

    git - 我如何在 GitHub 中贡献他人的代码?

    git - 我需要在裸仓库上运行 git gc 吗?

    git - merge 提交的共同祖先在 Git 中的哪里(当有交叉 merge 时)?

    git - 致命的 : protocol error: bad line length character: <htm

    git - 取消 git merge 但保留本地更改

    git - 将 git 存储库一路克隆回特定提交,但不是所有内容