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