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 如何将大型mercurial存储库拆分为较小的存储库_Svn_Mercurial_Repository - Fatal编程技术网

Svn 如何将大型mercurial存储库拆分为较小的存储库

Svn 如何将大型mercurial存储库拆分为较小的存储库,svn,mercurial,repository,Svn,Mercurial,Repository,这是对mercurial的复制,但特别是关于mercurial 我有一个巨大的subversion存储库,我已经将其转换为mercurial。现在看起来是这样的: MassiveFolder/ .hg/ bin/ common/ projA/ projB/ ... projX/ makefile README 我希望每个子项目都在自己的存储库中进行跟踪,以获得更好的性能。请注意,它们都构建到同一个bin文件夹中。我不认为这会是一个问题,但我

这是对mercurial的复制,但特别是关于mercurial

我有一个巨大的subversion存储库,我已经将其转换为mercurial。现在看起来是这样的:

MassiveFolder/
   .hg/
   bin/
   common/
   projA/
   projB/
   ...
   projX/
   makefile
   README
我希望每个子项目都在自己的存储库中进行跟踪,以获得更好的性能。请注意,它们都构建到同一个bin文件夹中。我不认为这会是一个问题,但我不确定是否需要做任何事情来调整路径。可以安全地假设每个开发人员都将在相同的结构中克隆存储库,但是如果有某种方法来创建一个元存储库来确保这一点,那就更好了

有没有一个标准的方法可以做到这一点?对于根文件夹中的makefile和readme之类的文件,我应该怎么做

如果我必须通过其他流程重新导入到hg,这也不应该是个问题。使用单片存储库执行标准操作所需的时间太长,即使它已经将svn从水中吹出。

您可以使用Mercurial(您可能已经知道,因为您已将存储库从svn转换为HG),并选择为svn子文件夹创建单独的HG存储库。
您尤其需要
include
指令:

include
指令将一个文件或目录下的所有文件包含在目标存储库中,并排除不在包含规则下的任何其他元素

然后,您可以使用在所需的文件夹结构中设置存储库:

子存储库是一种允许您将存储库集合视为一个组的功能。这将允许您将项目及其关联库作为一个组进行克隆、提交、推送和拉送


我的方法——我已经在较小的存储库上成功地使用过,如下所示:

确定列出较小的存储库以及它们之间的相互关系

  • 从原始存储库克隆
  • hg rm
    您不需要的所有文件
如果子项目与顶级Makefile交织在一起,则可以添加一个顶级存储库,该存储库包含较小存储库中的子存储库

这种方法保留了历史,不会强迫人们隐居。如果您对分解历史记录没问题,那么转换就可以了,它将缩小存储库的大小


一句(或几句)警告:与单个存储库操作的简单性相比,子存储库有很多困难的行为。有些操作会递归,而另一些则不会。特别是合并会递归,这通常会让我感到不适。确定整个系统状态可能是一个挑战,尤其是当子存储库的数量增加时(我正在帮助管理一个超过100个子存储库的项目,是的,这是处理它的逻辑和最佳方式)

[魔鬼代言人]你有没有尝试将整个东西导入git,看看它的性能如何?有。我也喜欢git。我们认为hg对我们的团队来说更好,因为学习曲线更低,windows工具也很好。我知道它被称为类似的东西,但我不确定我在寻找什么。子存储库看起来很酷。你是说我会用不同的include指令运行convert N多次,然后添加适当的hgsub文件来创建子存储库?或者我可以一步完成全部转换吗?我不是convert专家,但据我所知,无法一步完成所有转换,您需要使用不同的include指令运行convert N次。对,无法一步完成。另外,让我补充一点,您可以使用convert扩展来转换现有的Mercurial回购——它也可以进行hg->hg转换。