首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在git-filter分支的一次传递中重命名多个名称和电子邮件。

在git-filter分支的一次传递中重命名多个名称和电子邮件。
EN

Stack Overflow用户
提问于 2015-11-23 08:07:37
回答 1查看 206关注 0票数 2

是否可以通过一次git filter-branch来重命名2个或更多的电子邮件地址?

我尝试通过复制this answer来修改if..fi clause的代码

代码语言:javascript
复制
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

但是它给了我在过滤器分支上的错误,看起来是这样的:

代码语言:javascript
复制
error: duplicate parent bc8f9924c33558a275b8f694969529cf56232c80 ignored

然后,分支机构的历史被纠缠在一起:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 08:17:53

在按需要设置所有环境变量之后,只需要一个git commit-tree命令。例如,提交过滤器可能读取如下内容:

代码语言:javascript
复制
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创建新副本),同时构建一个对的映射。这就是为什么进行两个提交是不好的:一个现有的(旧的) SHA-1现在必须映射到两个新的副本,这在filter-branch如何处理提交图方面是完全不允许的。(如果您选择在复制过程中省略一些提交,多个旧的SHA-1可以映射到单个新的SHA-1。也就是说,新图可以是双射图,也可以是满图图,但是过滤器分支并不真正相信内射图,因为它将尝试将旧的引用映射到新图。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33866185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档