"Hg到Hg(Gateway)到SVN"与"Git to Git(Gateway)到SVN"相比

dm3*_*dm3 6 svn git mercurial gateway

问题类似于(未答复)和问题(同样的问题不涉及Git).

目标是Hg在完全转换为Hg之前为SVN 制作一段前端.

设置可能看起来如下所示(与上面提到的问题相同),但是我不确定中间Hg存储库的确切拓扑.

Dev1 Hg --> Hg <--> SVN
Dev2 Hg -/
Run Code Online (Sandbox Code Playgroud)

我知道上面的设置可以使用git并且git-svn本评论中所述:

Dev1 Git --> Git (bare) <--> Git (bridge) <--> SVN
Dev2 Git -/
Run Code Online (Sandbox Code Playgroud)

建立:

  1. 无论是SVN git svn init还是git svn cloneSVN.然后它成为"Git/SVN Bridge".

  2. 修复任何分支,标签等...这里.该svn/*裁判被认为是遥控器,所以如果你想跟踪分支,检查这些遥控器出来,并创建相应的地方分支机构.另外,检查标签,并创建实际标签.您必须为要在Git和SVN之间同步的任何SVN分支创建本地分支.

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

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

要通过网桥更改主服务器上的SVN中继,反之亦然:

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

  2. git checkout master

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

  4. git checkout svn/trunk (结账分离头)

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

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

  7. git checkout master

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

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

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

  • 没有远程跟踪分支(这可能与书签有关吗?单独克隆的回购?)
  • 不可能通过hgsubversion上面的列表中的步骤n.6推送合并提交.什么停止hgsubversion做什么svn dcommit?)

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

dur*_*n42 1

简短的版本是:还没有人让我相信将合并推送到 Subversion 的合理预期行为应该是什么,并且建议对 hgsubversion 进行一些细微修改,以使推送导致合并而不是重新调整修订。所有这些都不应该太难,只需要有人有动力去实施即可。如果您好奇,这个帖子有一个类似的请求,我对此做出了回应,对我与其他几个人思考过的基本方法进行了相当深入的讨论。