【问题标题】:Mapping between git committers and SVN usersgit 提交者和 SVN 用户之间的映射
【发布时间】:2009-03-24 14:54:11
【问题描述】:

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

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

【问题讨论】:

    标签: svn git git-svn


    【解决方案1】:

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

    config key: svn.authorsfile
    

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

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

    【讨论】:

    • @Christoph:顺便说一下,你确实有一个 Git repo (stackoverflow.com/questions/570945/git-clone-of-git-svn-tree/…) 的 SVN 镜像。你曾经使用过 --authors-file 选项吗?
    • 它对我不起作用 - 所有提交都以用户 root 的身份提交到 SVN。虽然我使用的是file: 方案,但我注意到您使用的是https:。您在 Apache 中使用什么身份验证方法允许设置 svn:author?
    • -A 或 --authors-file 都不能与这些工具的 GitHub for Windows 版本一起使用。尝试其中任何一个都将分别返回“未知选项:A”或“未知选项:作者文件”。
    • @TomLint GitHub for Windows?我不会知道的。这意味着与 git for windows (github.com/git-for-windows/git) 一起使用,例如最新的 Git 2.4.4 (github.com/git-for-windows/git/releases)
    【解决方案2】:

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

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

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

    所以,我们有:

    --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 合并!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多