1

总结问题:

将一组文件从现有存储库转移到新的子存储库的最简单(也是最好)的方法是什么,以便这些文件可以与其他父存储库集成,其中一些可能还不存在?

子存储库中的文件是否需要位于离散文件夹中,或者它们可以与其他文件一起存在?

详细问题:

我已经开始创建多个存储库的过程,这些存储库代表具有共享组件的多个项目,并且进展顺利,这要感谢 SO 以及对我的问题的一些有用答案

当我继续添加第二个项目时,我注意到我的项目中有一些文件是重复的,并且本质上是相同的,具有足够的相似性以保证将它们从主项目存储库中取出并创建一个新的子存储库,以便它们可

  1. 被我开始的任何新项目所使用,并且
  2. 从其他现有存储库中删除,因为它们是相同的。

我假设最好的方法是简单地创建一个新的存储库,在本地文件系统上移动文件,推送两个存储库,然后创建一个 .hgsub 文件并按照我之前的问题的答案继续。这显然会将相关文件转移到每个主项目下的本地文件系统中的子文件夹中,我可以忍受,但它确实提出了一个假设的问题 - 是否有可能在存储库中有一个有效的文件列表子存储库的一部分,但与其他文件一起存在(即不在子文件夹中)。

如果我想(例如)在属于另一个存储库的每个项目中都有一个“acme.h”文件,我可以这样做吗?碰巧的是,我此时不需要这样做,在我目前的情况下,从设计的角度来看,将我需要“重构”到另一个存储库中的文件更好地放在他们自己的子文件夹中,但情况可能并非总是如此。我在这里使用引号中的重构,严格来说,它更多的是重构重复的文件,即重构代码——但是同样的原则也适用。

希望我的问题足够简洁,无需过多解释即可回答。

4

1 回答 1

2

感谢总结,让回答更容易!

将一组文件从现有存储库转移到新的子存储库的最简单(也是最好)的方法是什么,以便这些文件可以与其他父存储库集成,其中一些可能还不存在?

您可以使用convert 扩展从现有 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 子存储库类型来跟踪单个文件。这样他们就不必住在目录中了。

于 2012-01-16T08:53:55.923 回答