来自非嵌套/同级目录的水银子存储库



是否可以使用同级路径创建子存储库?

Subversion 是我们在这里"选择"的 VCS,但我已经遇到了很多过时提交的问题。在Hg和SVN下对我的文件进行双重版本对我来说要方便得多,而且我用它取得了巨大的成功。但是,我还有其他一些同事在使用汞,除了他们可能没有注意到的问题外,我们在那里没有遇到任何问题。

我们的SVN布局如下所示

Area/
    trunk/
        Program1/
        Program2/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                
    branches/
        Program/
        Program/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                
    tags/
        Program1/
        Program2/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

当你在做一个项目时,这使得它有点愚蠢,因为如果你的主要项目由Program1Program2组成,以及更多的服务......我无法一次性获取所有变更集,因为我们有一个与目录匹配的存储库。所以我必须确保 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一样,有Program1Program2Service1等作为子回购。.hgsub将如下所示:

Program1 = Program1
Program2 = Program2
Service1 = Service1
Service2 = Service2

通过使用"琐碎的子存储库路径",您可以使事情变得简单:克隆看起来就像克隆源一样,并且所有内容都保持在一起。

最后一点:除非你在其他项目中使用 Program1Service1,否则你应该把所有东西都放在一个仓库里。

相关内容

  • 没有找到相关文章

最新更新