我的团队即将尝试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文件。我不喜欢为所有源代码树创建一个存储库的想法,因为有很多库。问题是:你如何处理这种情况?
答案 0 :(得分:1)
也许您应该尝试使用子库:
答案 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的不)
关于您的问题:
当(如果)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) )在这个分支