Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(又一个)什么';从SVN存储库到HG存储库的最佳转换是什么?_Svn_Mercurial_Migration_Repository - Fatal编程技术网

(又一个)什么';从SVN存储库到HG存储库的最佳转换是什么?

(又一个)什么';从SVN存储库到HG存储库的最佳转换是什么?,svn,mercurial,migration,repository,Svn,Mercurial,Migration,Repository,我的公司有一个大型Subversion(SVN)存储库,出于各种原因,我们正在考虑迁移到Mercurial(HG)。我希望学习适合我们情况的“最佳实践”理念 我们的SVN存储库相当单一,看起来像这样: 树干 Python_项目_1 Python_项目_2 Python_共享_代码 Flex_代码 ObjC_代码 分支机构 Python项目1发布版1.0.x 标签 Python_项目_1_发行版_1.0.0 目前,我们是存储库中任何代码和其他资源的唯一使用者,但切换的部分原因

我的公司有一个大型Subversion(SVN)存储库,出于各种原因,我们正在考虑迁移到Mercurial(HG)。我希望学习适合我们情况的“最佳实践”理念

我们的SVN存储库相当单一,看起来像这样:

  • 树干
    • Python_项目_1
    • Python_项目_2
    • Python_共享_代码
    • Flex_代码
    • ObjC_代码
  • 分支机构
    • Python项目1发布版1.0.x
  • 标签
    • Python_项目_1_发行版_1.0.0
目前,我们是存储库中任何代码和其他资源的唯一使用者,但切换的部分原因是我们可能/将与其他使用者共享代码的某些部分。因此,我们的项目将分为以下几类:

  • 专用代码(仅适用于我们)
  • 共享代码(与非公共合作伙伴共享)
  • 公共代码(通过开源许可证共享)
另外,为了强调这一点,一些代码(例如,上面SVN存储库示例中的Python_Shared_code文件夹)是跨项目共享的,因此任何Python项目(私有代码)都可以轻松获得,并且可能需要供外部使用者使用(共享代码或公共代码)

我有一些想法,我认为我将如何安排这一点,但我想在继续迁移之前获得外部想法

更新:我不确定从上面看是否清楚,但特别是,我正在寻找有关HG存储库布局及其交互方式的建议

更新:这个问题与之前提出的其他几个问题类似,但不完全相同:

与前面问题的主要区别在于“可访问性”和共享代码的概念。有些项目是相互关联的(例如Python_项目_1和Python_共享_代码),有些项目可能需要与外部实体共享(即共享代码和公共代码)。我们已经讨论过将单个单一SVN存储库拆分为多个HG存储库的概念,但我还没有发现之前讨论过的任何一种共享类型的概念。

我想说,建议每个模块单独进行repo的工作做得很好


在本文中,我建议使用subrepos(哪种)或(我的首选)构建系统,从本地构建框(如ivy)中提取依赖项。

Hmmm,似乎您可以使用hg svn进行试运行?抱歉,显然我没有说清楚。实际上,我并不担心如何进行迁移,而是更关心迁移后的布局。我在问题的末尾添加了一个更新来澄清。正如你所注意到的,这显然是一个重复的问题,其他提问都有一些很好的答案,完全涵盖了你的情况。如果你发现它们不够,也许可以链接到它们,并说明你的情况如何不同。照现在的样子,你会从复制者那里得到很多复制粘贴的答案,最终有人会关闭这个。谢谢你的评论。我已经对问题进行了澄清,解释了为什么我认为这与之前提出的问题不同。(如果它是我还没有找到的问题的副本,那么指向原始问题的指针也会很有用。)感谢您的澄清。我将在下面插话。一些想法:第一个链接的答案只解决了部分问题(每个项目都有一个存储库)。它没有提到相互关联的项目。第二个答案(使用次级回购)似乎很接近,但它并没有做到这一点。例如,考虑下面的内容:让<代码>嵌套< /Cord>是<代码>主< /代码>的子副本。当我更新并提交(如有必要,推送)到
nested
时,我需要
main
能够更新并获得更改(用户不知道子回购关系)。然而,一些测试表明情况并非如此。作为该评论的后续:具体来说,我需要对
嵌套的
存储库进行更改,以便在
存储库中自动提供。子回购似乎只在相反的方向工作(即,对
main
中的子回购的更改被提升/推回到原始
嵌套的
存储库)。子回购可以双向进行。使用subrepo,您有一个指向subrepo的特定修订版的指针,您可以通过仅从main中在该repo空间中更新来更新指向subrepo尖端的指针。这很像svn:外部。不过,作为一个过程问题,我建议将subrepo指针放在主轨道上,在subrepo中放置一些稳定的标记,而不仅仅是最前沿的标记。即使是在内部发布半正式的产品版本也是不错的,所以你可以说“外部项目X与内部项目Y版本Z协同工作,如果它不能用Z+1编译,就根据Z构建它”。不幸的是,至少对我们来说,我认为其中的“只是从main内部更新回购空间”是一个破坏交易的部分。我需要能够处于项目的顶层,更新并获得所有必需的依赖项。对于therepo,请使用$(find.-type d-name.hg | xargs-l dirname);执行hg更新-R$therepo;完成