首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量重命名Git作者?

批量重命名Git作者?
EN

Stack Overflow用户
提问于 2012-01-14 03:21:00
回答 3查看 574关注 0票数 4

我正在使用svn2git从现有的SVN存储库创建一个Git存储库。我下载了所有的代码(所有的10+分支,10+标签,超过4000个提交),并保存在Git repo中。现在,不幸的是,所有的作者都搞砸了。

所有的作者都没有电子邮件地址或名字,而且大多数作者在项目的生命周期中使用了多个电子邮件地址,所以我可能想要将它们合并起来。我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2012-01-14 03:23:30

您需要的工具是git-filter-branch。这允许您设置一个“提交过滤器”,以更改存储库中每个提交的作者姓名。

这是一个在运行svn2git之后设置并运行一次的步骤。这不是你通常想要在Git存储库上运行的东西,因为你已经做了进一步的提交。

你的问题表明“所有的作者都没有电子邮件地址或姓名”,这似乎表明svn2git中的某些东西并不完全像它应该做的那样。然而,请注意,Git对每个提交都有两个名称-“作者”和“提交者”(因为它们可以是不同的)。

票数 5
EN

Stack Overflow用户

发布于 2015-04-09 21:53:28

您真正想要的工具是reposurgeon

一旦你达到了你的问题规模(10个作者,1000个提交),git filter-branch就太慢太笨拙了。它一次只更改一个作者,而迭代整个存储库,整个过程可能需要几个小时。我有72个作者和21000个提交,这需要18个小时!

虽然reposurgeon一开始可能相当令人望而生畏,但对于这项任务来说,它是非常简单的。

无论如何,

  1. 都会创建一个类似于svn2git所需的作者映射文件(比如authors.txt),其中包含表单的每个SVN作者一行

oldauthor = New Author <new@email>

如果你愿意,你可以在这里将多个SVN作者映射到一个实际的作者。

  • 进入你转换后的git存储库,并执行

reposurgeon "verbose 1" "read" "authors read <../authors.txt" "write >../export"

  • You现在在顶级目录中有一个快速导出文件。将其转换回实际的存储库,如下所示:

代码语言:javascript
复制
 `mkdir ../new-repo && cd ../new-repo     git init     git fast-import < ../export     git reset --hard HEAD   # I needed this step for some reason` 

在我的大型存储库上,整个过程只需不到2分钟,而且原始的git存储库也完好无损--这在出错的情况下很有用。这只是复活的冰山一角...谢谢你,埃里克!

票数 4
EN

Stack Overflow用户

发布于 2015-03-13 16:52:34

下面是一个使用git filter-branch的示例,如前一个答案所示:

代码语言:javascript
复制
git filter-branch --commit-filter '
    if [ "$GIT_AUTHOR_NAME" = "old.address@domain.tld" ];
    then
        GIT_AUTHOR_NAME="New Name" \
        GIT_AUTHOR_EMAIL="new.address@domain.tld" \
        GIT_COMMITTER_NAME="New Name" \
        GIT_COMMITTER_EMAIL="new.address@domain.tld" \
        git commit-tree "$@";
    else
        git commit-tree "$@";
    fi' -f HEAD

将作者为old.address@domain.tld的所有提交重写为New Name <new.address@domain.tld>

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

https://stackoverflow.com/questions/8856024

复制
相关文章

相似问题

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