“Hg到Hg(Gateway)到SVN”与“Git to Git(Gateway)到SVN”相比

时间:2010-12-01 12:37:51

标签: svn git mercurial gateway

问题类似于this(未答复)和this one(同样问题不涉及Git)。

目标是在完全转换为Hg之前,将Hg作为SVN的前端一段时间。

设置应该如下所示(与上面提到的问题相同),但是我不确定中间Hg存储库的确切拓扑结构。

Dev1 Hg --> Hg <--> SVN
Dev2 Hg -/

我知道上述设置适用于gitgit-svn,如this comment中所述:

Dev1 Git --> Git (bare) <--> Git (bridge) <--> SVN
Dev2 Git -/
  

设定:

     
      
  1. SVN回购git svn initgit svn clone。然后它变成“Git / SVN Bridge”。

  2.   
  3. 修复任何分支,标签等...... svn/*引用被视为遥控器,因此如果您想要跟踪分支,请检查这些遥控器并创建适当的本地分支。另外,检查标签,并创建实际标签。您必须为要在Git和SVN之间同步的任何SVN分支创建本地分支。

  4.   
  5. 现在,在某处创建一个新的裸存储库(git init),然后从网桥中将所有分支推送到裸存储库(git push –tags)。

  6.   
  7. 所有Git用户现在克隆这个裸存储库。该桥只由一个(或几个)了解如何同步Git和SVN的人维护。

  8.         

    通过桥接器更新主服务器上的SVN中继,反之亦然:

         
        
    1. git svn fetch(获取新的SVN更改)

    2.   
    3. git checkout master

    4.   
    5. git pull master(从裸仓库中获取Git更改)

    6.   
    7. git checkout svn/trunk(结帐分离头)

    8.   
    9. git merge –no-ff –log master(合并来自master的更改)。 –no-ff确保实际提交,–log从主服务器上的每个提交中复制单个日志消息(–log是可选的)。如果要编辑提交消息,则可以运行git commit -amend。

    10.   
    11. git svn dcommit(这会将您的合并提交推送到SVN。请注意,提交位于分离的头上,不再可访问)。您在master上的所有工作(因为master和svn/trunk的合并基础)都作为单个更改提交,现在可供SVN用户使用。

    12.   
    13. git checkout master

    14.   
    15. git merge svn/trunk(从SVN获取新的更新 - 使用更改的提交消息 - 并合并到主控)

    16.   
    17. git push barerepo(使GN用户可以使用SVN更改)

    18.   

我不知道的是,是否有可能以某种方式在Hg上复制上述内容。正如我所看到的(我是Git的中间用户并且了解使用Hg的基本知识),Hg的障碍是:

  • 没有远程跟踪分支(这可以通过bookmarks吗?单独克隆的回购?)
  • 无法通过hgsubversion推送合并提交(上面的列表中的步骤n.6。阻止hgsubversion执行svn dcommit做什么?)

是否可以使Hg-SVN网关以与Git-SVN网关相同的方式工作?如果不是,为什么?

1 个答案:

答案 0 :(得分:1)

简短的版本是:没有人相信我推出合并到Subversion的合理预期行为应该是什么,并且对hgsubversion有一些轻微的修改,建议推动合并而不是重新修订。这些都不应该太难,只需要有人动机去实施。如果你很好奇,this thread有一个类似的请求,我回答了一个相当深入的讨论,我已经考虑过与其他几个人一起考虑的基本方法。