是否可以使用同级路径创建子存储库?
Subversion 是我们在这里"选择"的 VCS,但我已经遇到了很多过时提交的问题。在Hg和SVN下对我的文件进行双重版本对我来说要方便得多,而且我用它取得了巨大的成功。但是,我还有其他一些同事在使用汞,除了他们可能没有注意到的问题外,我们在那里没有遇到任何问题。
我们的SVN布局如下所示
Area/
trunk/
Program1/
Program2/
...
Services/
Program1ServiceA/
Program1ServiceB/
branches/
Program/
Program/
...
Services/
Program1ServiceA/
Program1ServiceB/
tags/
Program1/
Program2/
...
Services/
Program1ServiceA/
Program1ServiceB/
当你在做一个项目时,这使得它有点愚蠢,因为如果你的主要项目由Program1
和Program2
组成,以及更多的服务......我无法一次性获取所有变更集,因为我们有一个与目录匹配的存储库。所以我必须确保 4 或 5 个存储库是同步的,尤其是与一些服务引用同步。
我在单个目录下使用子存储库有一些好运气:
MainRepo/
Subrepo1/
Subrepo2/
但是我想做的是指定一个相对路径,以便我可以对子存储库使用同级目录,这样我就可以有这样的东西:
Area/
Project1/
Program1/ (points to ../trunk/Program1)
Program2/ (points to ../trunk/Program2)
Service1/ (... You get the idea)
Service2/
trunk/
Program1/
Program2/
Services/
Service1/
Service2/
但到目前为止,它还没有像我预期的那样工作。 trunk/Program1
是一个汞存储库,我的Project1/.hgsub
文件包含
Program1 = ../trunk/Program1
我也试过../../trunk/Program1
但其中任何一个的结果是创建了一个新目录:Area/Program1/Project1
该目录为空。
到目前为止,我能够找到的唯一搜索结果使用基于http
存储库的子存储库,所以我不确定从这里开始。我们的开发环境是Windows 7,所以"简单"的答案是创建联结,但我主要关心的是让这样的事情变得容易做,所以进入门槛尽可能低,甚至像从管理员cmd窗口mklink /J Program1 ..trunkProgram1
这样简单的事情也是阻止人们迁移到更好的工作流程的另一件事。
是否可以像我想要的那样添加一个子存储库,或者是否有更好的方法来做我们正在做的事情?
子存储库始终位于另一个存储库中。换句话说,子存储库允许您对存储库集合进行版本控制,其中某些存储库嵌套在其他存储库中。因此,如果不创建外部存储库,子存储库就不能是同级。
当 Mercurial 需要确定从何处获取新的子存储库时,将使用您正在谈论的相对路径。也就是说,当您运行hg update
(或当它作为hg clone
的一部分为您运行时)并且 Mercurial 注意到一个.hgsub
文件时,它需要创建那里提到的子存储库。为了创建子存储库,Mercurial 使用右侧的路径:
sub-A = relative/path
sub-B = C:/absolute/path
在这里sub-A
将使用命令在工作副本的根目录中签出
hg clone <default path for main repo>/relative/path sub-A
并使用命令检出sub-B
hg clone C:/absolute/path sub-B
仅此而已 - 这是一个非常简单的机制。我试图在我的子存储库指南中描述这一点,并且在 wiki 中也有解释。
对于您的情况,您可以为属于一起的部件创建一个薄壳存储库。这个回购将像上面Project1
一样,有Program1
、Program2
、Service1
等作为子回购。.hgsub
将如下所示:
Program1 = Program1
Program2 = Program2
Service1 = Service1
Service2 = Service2
通过使用"琐碎的子存储库路径",您可以使事情变得简单:克隆看起来就像克隆源一样,并且所有内容都保持在一起。
最后一点:除非你在其他项目中使用 Program1
或 Service1
,否则你应该把所有东西都放在一个仓库里。