汇总问题:
将一组文件从现有存储库转移到新的子存储库的最简单(最好)方法是什么,因此这些文件可以与其他父存储库集成,其中一些可能尚不存在?
子存储库中的文件是否需要位于离散文件夹中,或者它们是否可以与其他文件一起存在?
详细问题:
我已经开始创建多个存储库,代表几个拥有共享组件的项目,这很顺利,多亏了SO和我的问题的一些有用的答案here
当我继续添加第二个项目时,我注意到我的项目中有一些文件是重复的,并且基本上是相同的,具有足够的相似性以保证将它们从主项目存储库中取出并创建一个新的子存储库所以它们可以是
我假设最好的方法是简单地创建一个新的存储库,在本地文件系统上移动文件,推送两个存储库,然后创建一个.hgsub文件,并按照my earlier question的答案进行处理。这显然会将相关文件转移到每个主要项目下的本地文件系统中的子文件夹,我可以使用它,但它确实提出了假设性问题 - 是否可以在存储库中有一个有效的文件列表子存储库的一部分,但与其他文件一起存在(即不在子文件夹中)。
如果我想(例如)有一个" acme.h"在每个项目中的文件是另一个存储库的一部分我可以这样做吗?事实上,我现在不需要这样做,而在我目前的情况下,从设计的角度来看,更好可以获得我需要的文件& #34;重构"到他们自己的子文件夹中的另一个存储库,但情况可能并非总是如此。我在这里使用重构引用,严格来说它更多的是重构重构代码的重构文件 - 但是同样的原则适用。
希望我的问题足够简洁,无需太多解释即可得到解答。
答案 0 :(得分:2)
感谢您的总结,让它更容易回答!
将一组文件从现有存储库转移到新的子存储库的最简单(最好)方法是什么,因此这些文件可以与其他父存储库集成,其中一些可能尚不存在?
您可以使用convert extension从现有Mercurial存储库中提取目录。您将要使用--filemap
标志,并在文件映射中包含所需的目录并将其重命名为根目录。有关详细信息,请参阅hg help convert
。
使用
获得较小的存储库后子存储库中的文件是否需要位于离散文件夹中,或者它们是否可以与其他文件一起存在?
他们必须在自己的文件夹中。这只是因为这就是Mercurial,Git,Subversion中存储库的样子......当你处理subrepositories时,Mercurial没有跟踪subrepo中的文件:它只是问一些(其他)系统在某个位置检查存储库foo
。
所以当你的.hgsub
文件有
foo = foo
bar = [git]bar
baz = [svn]baz
然后Mercurial会在hg update
上注意到这一点并运行
hg clone default-path-of-this-repo/foo foo
git clone default-path-of-this-repo/bar bar
svn checkout default-path-of-this-repo/baz baz
为你的。这解释了为什么子目录是外部存储库中的目录:这就是克隆/结帐这些天的样子。
如您所见,子存储库可以是不同类型的。可以想象有人可以添加RCS子存储库类型来跟踪单个文件。然后他们就不必住在目录中。