28

我正在使用 git-svn 存储一些 SVN 存储库的“登台”版本,允许其他用户从该登台存储库中提取并将更改提交回它,然后在登台存储库上的提交定期提交到上游SVN 回购。

我想知道是否有办法在 git 提交者的姓名和 SVN 用户名之间进行映射,以便在提交回 SVN 存储库时保持他们的信息完整?

4

2 回答 2

27

Vincent Danen在使用 git svn 时确实提到了 -A 选项:

因此,使用 ~/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遇到作者文件中不存在的 SVN 提交者名称,则 git-svn 将中止操作。
然后用户必须添加适当的条目。
在修改作者文件后重新运行之前的git-svn命令应该会继续运行。

config key: svn.authorsfile

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

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

于 2009-03-24T15:11:55.180 回答
1

第二种选择是提供解决映射的程序/脚本。

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

如果…作者文件中不存在的 SVN 提交者名称,git svn 将中止操作。然后用户必须添加适当的条目。在修改作者文件后重新运行之前的 git svn 命令……</p>

所以,因此我们有:

--authors-prog=mapMyCompanyUsers.sh

为了不强迫每个用户首​​先签出/ curl / wget'ting 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 合并!

于 2012-10-18T14:14:42.980 回答