git提交者和SVN用户之间的映射

时间:2009-03-24 14:54:11

标签: svn git git-svn

我正在使用git-svn存储某个SVN仓库的“暂存”版本,允许其他用户从此暂存仓库中提取并提交更改回来,然后定期仓库的提交定期承诺上游SVN回购。

我想知道是否有办法在git提交者的名字和SVN用户名之间进行映射,以便在提交回SVN回购时它们的信息保持不变?

2 个答案:

答案 0 :(得分:24)

Vincent Danen确实提到the -A option when using git svn

  

因此,使用〜/ git作为Git存储库[...]的顶级目录,创建authors.txt文件。
  此文件将Subversion提交者的名称映射到Git作者,从而生成导入的Subversion存储库的正确历史记录   对于具有少量提交者的项目,这非常简单。对于拥有大量提交者的大型项目,这可能需要一些时间。该文件的语法是:

user = Joe User <user@example.com>
vdanen = Vincent Danen <vdanen@somewhere.com>
  

短名称是Subversion的提交者名称,而长名称是用户的全名和电子邮件地址,由Git使用。

     

最后一步是克隆Subversion存储库,该存储库基于它创建一个本地Git存储库。假设您的存储库使用/ trunk,/ tags和/ branches标准,请使用:

# git svn clone --no-metadata -A authors.txt -t tags -b branches -T trunk https://svn.example.com/svn/repo

-A<filename>
--authors-file=<filename>

语法与git-cvsimport使用的文件兼容:

loginname = Joe User <user@example.com>
  

如果指定了此选项且git-svn遇到authors-file中不存在的SVN提交者名称,git-svn将中止操作。
  然后,用户必须添加适当的条目   修改authors文件后重新运行上一个git-svn命令应该继续运行。

config key: svn.authorsfile

这适用于所有git-svn命令,包括git-svn dcommit(当你将推送到 SVN时)(注意:我没有直接测试它)。

Mohammed Gamal报告(在评论中)确实有效,但没有--no-metadata选项。

答案 1 :(得分:1)

第二个选项是提供一个解决映射的程序/脚本。

如果提交者的数量未知但可能是从SVN提交者名称“生成”,则非常有用!

  

如果...作者文件中不存在的SVN提交者名称,   git svn将中止操作。然后,用户必须添加适当的条目。修改authors文件后重新运行上一个git svn命令...

所以,我们有:

--authors-prog=mapMyCompanyUsers.sh

为了不强迫每个用户首​​先签出/卷曲/忘记map-Script,你可以提供这样的东西:

$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile)

克隆将如下所示:

$ git svn clone -s --authors-prog=$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile) https://svn.example.com/svn/repo/

这会强制所有映射都是相同的,SVN克隆可能会被“共享”并通过git合并!