1

是否可以使用兄弟路径创建子存储库?

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

我们的 SVN 布局是这样的

Area/
    trunk/
        Program1/
        Program2/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

    branches/
        Program/
        Program/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

    tags/
        Program1/
        Program2/
        ...
        Services/
            Program1ServiceA/
            Program1ServiceB/                

这让您在处理项目时有点愚蠢,因为如果您的主要项目由Program1andProgram2和其他一些服务组成......我不能一次获得所有的变更集,因为我们已经有一个与目录匹配的存储库。所以我必须确保 4 或 5 个 repos 是同步的,尤其是对于一些服务引用。

我在单个目录下使用 subrepos 运气不错:

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,所以“简单”的答案是创建联结,但我主要关心的是让这样的事情容易做,所以进入门槛尽可能低,甚至像mklink /J Program1 ..\trunk\Program1from管理员 cmd 窗口是另一件事,它会阻止人们迁移到更好的工作流程。

是否可以添加我想要的子存储库,或者有更好的方法来做我们正在做的事情?

4

1 回答 1

2

子存储库始终位于另一个存储库中。换句话说,子存储库允许您对存储库集合进行版本控制,其中一些存储库嵌套在其他存储库中。因此,如果不创建外部存储库,子存储库就不能成为兄弟。

当 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中也对此进行了解释。

对于您的情况,您可以为属于一起的部分创建一个瘦壳存储库。这个 repo 和Project1上面一样,并且有Program1, Program2, Service1, 等作为子repos。将.hgsub如下所示:

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

通过使用“简单的 subrepo 路径”,您可以让事情变得简单:克隆看起来就像克隆源一样,并且所有内容都保存在一起。

最后一点:除非您使用Program1Service1在其他项目中,否则您应该将所有内容放入一个存储库中。

于 2012-06-19T17:57:04.973 回答