这是this question,的副本,但特别是关于mercurial。
我有一个庞大的subversion存储库,我已经转换为mercurial。它现在看起来像这样:
MassiveFolder/
.hg/
bin/
common/
projA/
projB/
...
projX/
makefile
README
我希望在自己的存储库中跟踪每个子项目以获得更好的性能。请注意,它们都构建在相同的bin文件夹中。我不认为这会是一个问题,但我不确定我是否需要做任何事情来调整路径。可以安全地假设每个开发人员都会在同一个结构中克隆存储库,但如果有某种方法可以创建一个可以确保存储库的元存储库,那就更好了。
有没有一种标准的方法可以做到这一点?对于生成根文件夹中的makefile和自述文件,我该怎么办?
如果我必须通过其他一些不应该成为问题的过程重新导入到hg。使用单片存储库进行标准操作只需要太长时间,即使它已经将svn从水中吹走了。
答案 0 :(得分:4)
您可以使用Mercurial的Convert Extension (您可能已经知道,因为您已将存储库从SVN转换为HG)并使用-filemap
选项为其创建单独的HG存储库SVN子文件夹。
您需要include
指令:
include
指令导致文件或目录下的所有文件都包含在目标存储库中,并且排除了不在包含规则下的任何其他元素。
然后,您可以使用Mercurial Subrepositories在所需的文件夹结构中设置存储库:
子存储库是一种允许您将存储库集合视为一个组的功能。这将允许您作为一个组克隆,提交,推送和拉取项目及其相关库。
答案 1 :(得分:2)
我在小型存储库中成功使用的方法如下:
确定列出较小的存储库以及它们如何相互关联。
hg rm
您不想要的所有文件如果子项目与顶级Makefile交织在一起,则可以在较小的存储库中添加一个顶级存储库。
这种方法保留了历史,并没有强迫人们重新回避。如果您对爆炸历史感到满意,转换就可以了,并且会缩小存储库大小。
警告的一个词(或几个):与一个存储库操作的简易性相比,子存储库有很多困难的行为。有些操作是递归的,有些则不是。合并特别是recurses,它通常会让我适应。确定整个系统状态可能具有挑战性,特别是随着子存储库数量的增加(我正在帮助管理一个包含> 100个子存储库的项目,并且是,这是处理逻辑和最佳方式它)。