大规模重命名Git作者?
我正在使用大规模重命名Git作者?,git,Git,我正在使用svn2git从现有的SVN存储库创建Git存储库。我下载了全部内容(所有10多个分支,10多个标记,超过4000次提交),并在Git repo中完成。现在,不幸的是,所有的作者都搞砸了 所有作者都没有电子邮件地址或姓名,而且大多数作者在项目生命周期中使用了多个电子邮件地址,因此我可能希望将它们合并。我怎样才能做到这一点?您需要的工具是。这允许您设置“提交筛选器”,更改存储库中每次提交的作者名称 这是一个在运行svn2git后设置并运行一次的步骤。它不是您通常希望在Git存储库上运行的
svn2git
从现有的SVN存储库创建Git存储库。我下载了全部内容(所有10多个分支,10多个标记,超过4000次提交),并在Git repo中完成。现在,不幸的是,所有的作者都搞砸了
所有作者都没有电子邮件地址或姓名,而且大多数作者在项目生命周期中使用了多个电子邮件地址,因此我可能希望将它们合并。我怎样才能做到这一点?您需要的工具是。这允许您设置“提交筛选器”,更改存储库中每次提交的作者名称
这是一个在运行svn2git
后设置并运行一次的步骤。它不是您通常希望在Git存储库上运行的东西,您已经对它做了进一步的承诺
您的问题表明“所有的作者都没有电子邮件地址或姓名”,这似乎表明
svn2git
中的某些东西并没有达到预期的效果。但是,请注意,Git的每个提交都有两个名称——“作者”和“提交者”(因为它们可能不同)。下面是一个使用Git筛选器分支的示例,如前面的答案所示:
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
重写所有作者
旧的提交。address@domain.tld
到新名称
您真正想要的工具是
一旦你达到了你的问题大小(10个作者,1000个提交)git filter branch
就是太慢和笨拙了。它一次只改变一个作者,同时迭代整个回购协议,整个过程可能需要几个小时。我有72位作者和21000次提交,这需要18个小时
虽然一开始可能会让人望而生畏,但这项任务非常简单
svn2git
所需的作者映射文件(比如authors.txt
),每个SVN表单作者包含一行
oldauthor=新作者
在这里,如果您愿意,您可以将多个SVN作者映射到一个实际作者repose“详细1”“读取”“作者读取../export”
mkdir../new repo&&cd../new repo
初始化
git快速导入<../export
git重置--硬头#出于某种原因,我需要这一步
在我的大型存储库中,整个过程只需不到2分钟的时间,并且保持原始git存储库完好无损—在出现问题时非常有用。而这只是冰山一角,那就是。。。谢谢你,埃里克 svn没有(必须)针对用户ID的电子邮件。这可能只是一个登录,没错。我仍然会说那是一个“名字”,只是不是一个全名。你能把我和一个“例如”链接起来,说明我需要做什么吗?在这个项目的生命周期中,我有大约10-15个用户,我想对每个用户进行重命名;他们的姓名和电子邮件地址。