为具有与其他项目的公共共享文件的项目创建分支

时间:2013-02-19 05:03:44

标签: version-control mercurial branch

我的团队即将尝试Mercurial及其分支功能(目前我们正在使用Subversion,但它主要用作代码存储而不是带分支的完整版本控制系统等)。所以这是一个问题:我正在开发一组DLL,每个库实现都位于自己的文件夹中。我有一个地方(“Common”文件夹),其中包含这些库的接口单元以及其他团队成员的常用单元。

看起来像这样:

    \Source  
        \MyLibrary1  
        \MyLibrary2  
        \MyLibrary3  
    \Common  
        MyLibrary1_Intf.h  
        MyLibrary2_Intf.h  
        MyLibrary3_Intf.h  

当我想为MyLibrary3创建分支时,我该怎么办?好的,我正在为MyLibrary3创建一个分支但是MyLibrary3_Intf.h呢?我应该为\ Common创建一个分支吗?我应该提一下,假设每个项目(库)都位于自己的存储库中。以及Common文件。我不喜欢为所有源代码树创建一个存储库的想法,因为有很多库。问题是:你如何处理这种情况?

3 个答案:

答案 0 :(得分:1)

也许您应该尝试使用子库:

https://www.mercurial-scm.org/wiki/Subrepository

答案 1 :(得分:0)

除非您必须独立“发布”库,否则可以使用单独的存储库。否则,最好使用ONE repo来节省大量的repo-management和库同步问题。

使用1个repo,您​​可以使用真实分支来实现各个库的干净修订历史记录(如果这是一个目标)。分支模型可能如下所示:

develop    
main branch  ----------o--o---------o---o--
                      /  /|        /   /
lib1 branch  --o--o--o----+-o---------o----
                       /  |      / 
lib2 branch  --o------o---+--o-------------
                          |    /    
lib3 branch  -o----o------+---o------o-----
                          ^
                         sync

答案 2 :(得分:0)

首先,您必须至少了解并理解Subversion和Mercurial之间的一些基本差异(关于CVCS与DVCS的

  • 如果需要,在Subversion中你可以(并且大部分布局都)分支子树的任何部分。在Mercurial中,您可以分支整个存储库
  • 在Subversion中svn:externals可以引用目录或目录中的单个文件,在Mercurial(sub | guest)中,repos只能链接整个外部存储库(在某些状态) - 即你将无法链接(简单, MyLibrary1存储库MyLibrary1_Intf.h 文件,只有存储库(MyLibrary1_Intf.h单独存在或与所有Common共享)

关于您的问题

当(如果)MyLibrary *和Common是独立的存储库,链接为super和subrepo时,MyLibrary *中的分支不会影响Common(您总是链接到某个状态/ changeset / subrepo /可以在同一个或者是superrepo / in superrepo .hgsubstate中不同分支的不同分支,因此 - 如何根据库分支中的变化要求更改* .h文件是您的自由选择

PS :承诺的技巧,包含所有* .h的一个Common repo,但是在subrepo中需要单个文件

Subrepo定义允许使用任何合法的URL规范,其中之一是repository#cset-id,其中changeset-id可以是任何适用的ID(也是branchname)。因此,如果您将从默认分支(包含所有文件)创建每个MyLibrary的单独命名分支并在每个分支文件中删除,与特定库无关,使用branch-id定义suprepo,superrepo将只知道文件(s) )在这个分支