6

问题类似于这个(未回答)和这个(同样的问题不涉及 Git)。

目标是Hg在完全过渡到 Hg 之前为 SVN 做一个前端一段时间。

设置可能看起来像下面描述的那样(与上面提到的问题相同),但是我不确定中间 Hg 存储库的确切拓扑。

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

我知道上述设置适用于此评论git中的git-svn描述:

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

设置:

  1. git svn init或SVNgit svn clone存储库。这将成为“Git/SVN 桥”。</p>

  2. 在这里修复任何分支、标签等。refs 被视为远程,因此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从 master 上的每个提交复制单独的日志消息(–log可选)。如果要编辑提交消息,则可以运行 git commit –amend。

  6. git svn dcommit(这会将您的合并提交推送到 SVN。请注意,提交是在一个分离的头部,并且不再可访问)。您在 master 上的所有工作(自从 master 和 的合并基础以来svn/trunk)作为单个更改提交,现在可供 SVN 用户使用。

  7. git checkout master

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

  9. git push barerepo(使 SVN 更改可供 Git 用户使用)

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

  • 没有远程跟踪分支(这可以通过书签实现吗?单独的克隆存储库?)
  • 不可能通过hgsubversion(上面列表中的第 6 步。什么停止hgsubversion做什么svn dcommit?)

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

4

1 回答 1

1

简短的版本是:还没有人说服我将合并推送到 Subversion 的合理预期行为应该是什么,并且建议对 hgsubversion 进行一些细微的修改,以使推送结果导致合并而不是重新修订。一切都不应该太难,只需要有人有动力去做。如果你很好奇,这个线程有一个类似的请求,我在回复中对我与其他几个人一起考虑过的基本方法进行了相当深入的讨论。

于 2010-12-25T15:19:05.717 回答