是否可以通过一次 git filter-branch
批量重命名 2 个或更多电子邮件地址?
我尝试改编 this answer 中的代码只需复制 if..fi 子句
:
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name 1>" ];
then
GIT_COMMITTER_NAME="<New Name 1>";
GIT_AUTHOR_NAME="<New Name 1>";
GIT_COMMITTER_EMAIL="<New Email 1>";
GIT_AUTHOR_EMAIL="<New Email 1>";
git commit-tree "$@";
else
git commit-tree "$@";
fi
if [ "$GIT_COMMITTER_NAME" = "<Old Name 2>" ];
then
GIT_COMMITTER_NAME="<New Name 2>";
GIT_AUTHOR_NAME="<New Name 2>";
GIT_COMMITTER_EMAIL="<New Email 2>";
GIT_AUTHOR_EMAIL="<New Email 2>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
但是它在过滤器分支期间给了我错误,如下所示:
error: duplicate parent bc8f9924c33558a275b8f694969529cf56232c80 ignored
然后分支历史就变得困惑起来:
最佳答案
你只想要一个git commit-tree
根据需要设置所有环境变量后,命令。例如,您的提交过滤器可能会显示如下内容:
git filter-branch -f --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name 1>" ]; then
GIT_COMMITTER_NAME="<New Name 1>";
GIT_AUTHOR_NAME="<New Name 1>";
GIT_COMMITTER_EMAIL="<New Email 1>";
GIT_AUTHOR_EMAIL="<New Email 1>";
fi;
if [ "$GIT_COMMITTER_NAME" = "<Old Name 2>" ]; then
GIT_COMMITTER_NAME="<New Name 2>";
GIT_AUTHOR_NAME="<New Name 2>";
GIT_COMMITTER_EMAIL="<New Email 2>";
GIT_AUTHOR_EMAIL="<New Email 2>";
fi;
git commit-tree "$@"
'
(尽管如果要更改的名称数量越来越多,我可能会运行一个映射文件,而不是一长串容易打字错误的 if ... then
,并且映射作者和单独提交者)。
请记住filter-branch
只需复制您告诉它复制的所有提交(通过使用 git commit-tree
制作新副本),同时构建 filter-branch
方面是根本不允许的。与提交图一起做。 (如果您选择在复制过程中省略一些提交,多个旧的 SHA-1 可以映射到一个新的 SHA-1。也就是说,新图可以是双射的或满射的,但过滤器 -分支并不真正相信单射,因为它将尝试将旧引用映射到新图。)
关于git - 在一次 git-filter-branch 中重命名多个姓名和电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866185/