svn - 开发团队使用 GIT/Mercurial 与 SVN 交叉

标签 svn git mercurial hgsubversion

问题是我希望能够使用 Mercurial 或 git 作为开发前端,但在 Subversion 中进行了变更集和更新,通常是在集成分支或仅由Mercurial 的脚本,或者当 Hudson 注意到变化时由 Hudson 编写的脚本。然后,我们的 Mercurial 存储库会根据使用 SVN 的其他开发人员所做的更改进行更新,我们会将更改 pull 入并集成它们,并在提供新的开发版本之前测试更改,等等。

有谁知道以下场景对于 merge 和分支的开发团队是否可能?或者是否有更好的方法......除了强大的武装人员只使用一种工具?

以下策略由以下部分组成:

  • SVN
  • 使用 Mercurial 进行 SVN 的一对一克隆
  • Mercurial 开发存储库

在下面的配置中,更新通常会从 SVN/trunk pull 入克隆 (hgsubversion)。克隆将是只读的,并且定期有一个脚本来提取更改。然后,克隆将被克隆到开发存储库中,该存储库是读写的(它是常规的 Mercurial 存储库)。当开发人员将更改推送到此开发人员存储库时,驻留在集成分支中的元素将被推送到 SVN/集成分支中。该分支仅由自动化脚本提交。如果其他使用 svn 的开发人员仅将更改推送到 SVN 的主干,则可以将它们 pull 入克隆并 merge 到 Mercurial 的环境中。缺点是您将失去更改来源的 SVN 级别的可见性。

[[[[ trunk [[[[[[[[[[[[[[[[[[[[[[[[ SVN ]]]]]]]]]]]] branch/integration ]]]]]]]]]]]]]]]]]]
        |                                                   ^
        |                                                   |
        |                                                   |
        v                                                   |
SVN - Mercurial Clone                                       |
        |                                                   |
        |                                                   |
        |                                                   |
        v                                                   |
Mercurial - Development ---------------------------- Branch - Integration

最佳答案

在使用 DVCS 的类(class)中​​,这实际上是我解释的主要用例之一,我认为它展示了 DVCS 的强大之处......

您有多种方法可以做到这一点。

手动方式

SVN/checkout代码,然后Hg/initHg/commit一切。然后,您可以在 Hg 下进行工作,在本地根据需要进行小而频繁的原子修改。当您想要提交回 SVN 时,您首先Hg/up 到您在 SVN/checkout 之后所做的 Hg 修订。您SVN/up不会出现 SVN 冲突,因为您刚刚从普通 SVN 修订版进行更新。您Hg/commitHg/merge,然后SVN/commit。如果有人同时在 SVN 中提交,则重复操作:Hg/up 到最后一个干净的 SVN 修订版、SVN/upHg/commit+merge.

跟踪最后一个 SVN clean 修订版的方式取决于您。您可以使用每次更改的标签,将 SVN 修订版保存在分支或单独的存储库中。 TIMTOWTDI

额外好处:这也是为使用 Hg 的人充当 SVN 提交者的一种方式,而他们无需脱离版本控制。

自动方式

我从来没有这样用过,但是tailor能够反复进行 SVN/Hg 双向转换。

关于svn - 开发团队使用 GIT/Mercurial 与 SVN 交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216942/

相关文章:

mercurial - 如何列出某个Mercurial分支中的所有标签?

svn - 构建服务器和源代码控制存储库

git - 在工作电脑和家庭电脑之间同步 git 存储库

version-control - Mercurial,永远忘记文件

git push 尝试推送 git ls-files 中未列出的文件

创建 .gitattributes 文件后,Git 不会更改行结尾

目录 : Mercurial - hg merge - "abort: access is denied" 的 Windows 权限

linux - 在 Linux 中使用 AD 组进行颠覆?

svn checkin 失败,因为缺少子文件夹。除了检查新存储库之外还有其他选择吗?

linux - SVN Hook pre-revprop-change 不工作