Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 具有多个项目的Mercurial_Version Control_Mercurial_Dvcs_Repository Design - Fatal编程技术网

Version control 具有多个项目的Mercurial

Version control 具有多个项目的Mercurial,version-control,mercurial,dvcs,repository-design,Version Control,Mercurial,Dvcs,Repository Design,在我的SVN存储库中,我有几个具有不同发布周期的项目。版本是使用SVN中的经典标记结构创建的。当版本中有bug需要修复时,从标记创建一个分支,该bug被修复,然后从那里合并到主干中 现在,出于多种原因,我想通过一个中心推送站点从SVN切换到mercurial 问:在mercurial中,哪种方法是组织多个在它们之间共享很少代码的项目的最佳方法?我应该为每个项目创建多个推送站点吗 请在回答中说明如何重新创建我的发布标签、bugfix分支。。。使用您首选的存储库设计版本 编辑:我想安装尽可能少的扩展

在我的SVN存储库中,我有几个具有不同发布周期的项目。版本是使用SVN中的经典标记结构创建的。当版本中有bug需要修复时,从标记创建一个分支,该bug被修复,然后从那里合并到主干中

现在,出于多种原因,我想通过一个中心推送站点从SVN切换到mercurial

问:在mercurial中,哪种方法是组织多个在它们之间共享很少代码的项目的最佳方法?我应该为每个项目创建多个推送站点吗

请在回答中说明如何重新创建我的发布标签、bugfix分支。。。使用您首选的存储库设计版本

编辑:我想安装尽可能少的扩展

编辑2:

鉴于此SVN布局:

.
|-- project-a
|   |-- branches
|   |   |-- 1.x
|   |   `-- feature-1
|   |-- tags
|   `-- trunk
`-- project-b
    |-- branches
    |-- tags
    |   |-- 1.0
    |   `-- 1.1
    `-- trunk
(谢谢@bendin!:)

使用多个hg推送存储库是否更好

project_a-trunk
project_a-1.x
project_a-feature-1
project_b-trunk
为了树枝。标签被折叠到相应的分支中

或者在本例中,您更愿意使用两个推送存储库

project_a
project_b
具有命名分支机构,因此在一个回购协议中有多个头部


我看到的多头回购的优点是,我不必在多头回购中寻找标签。我看到的缺点是,hg手册似乎不鼓励多头回购。你会/会怎么做?

我认为你想尝试一下

一些subversion存储库将逻辑上不相关的东西(即具有不同版本号和发布周期的项目)分组到一个主干下:

.
|-- branches
|   |-- project-a-1.x
|   `-- project-a-feature-1
|-- tags
|   |-- project-a-1.0
|   |-- project-b-1.0
|   `-- project-b-1.1
`-- trunk
    |-- project-a
    `-- project-b
这种布局在mercurial中没有直接模拟。每个有自己的发布周期和版本号的项目都应该有自己的存储库


一些subversion存储库通过为每个项目提供自己的主干、标记和分支来实现这一点:

.
|-- project-a
|   |-- branches
|   |   |-- 1.x
|   |   `-- feature-1
|   |-- tags
|   `-- trunk
`-- project-b
    |-- branches
    |-- tags
    |   |-- 1.0
    |   `-- 1.1
    `-- trunk
您可以将每个项目视为物理subversion存储库中的逻辑存储库。每个项目都有自己的主干、标记和分支。这还有一个好处,即可以缩短标记和分支名称,因为您已经知道它们属于哪个项目


使用mercurial这样的工具来表达这种布局也很简单。每个“项目”都成为一个mercurial存储库。该存储库中的标记和分支是该项目的标记和分支。

正如bendin所说,您应该创建多个存储库,每个独立项目一个存储库作为开始

Mercurial提交是在整个存储库级别进行的,您不能只签出一个子目录。这与Subversion不同,Subversion允许您通过仅提交一些文件来进行一致的提交,但也允许您仅签出一个子目录

发布时,通常会向Mercurial存储库添加一个标记(
hg-tag
)。您可以自由决定是否为每个版本保留一个bug修复库,或者是否在第一次需要时创建它们。诀窍在于

% hg clone -r 1.0 project-a project-a-1.0.x %hg克隆-r 1.0项目-a项目-a-1.0.x
可用于创建存储库
project-a-1.0.x
,该存储库仅具有标签
1.0
之前的历史记录。然后可以在
project-a-1.0.x
中修复该错误,并将其推回到
project-a
。可以在
project-a-1.0.x
存储库中进行进一步的错误修复。

Cool。我有第二个布局。那么你的意思是我应该创建多个hg回购协议?是的。为每个项目创建一个mercurial存储库。这是一个很好的答案,可以解决不同项目有不同的回购协议的问题,但对于同一项目的不同版本又如何?”这本书似乎建议发行不同的回购协议,但这不是维护历史、备份等的痛苦吗?+1我一直在为同一个问题苦苦挣扎。我考虑过的一件事是对相关项目进行单一回购。我不会在一次回购中合并多个项目。这让历史变得更加混乱。考虑到FFA森林扩展,而DFA建议。