Tob*_*orn 32 version-control mercurial dvcs repository-design
我在SVN存储库中有几个具有不同发布周期的项目.通过使用SVN中的经典标记结构创建版本.当在版本中存在要修复的错误时,会从标记创建分支,该错误会被修复,然后从那里合并到主干中.
现在,出于多种原因,我想通过中央推送站点从SVN切换到mercurial.
问题:在mercurial中组合多个项目的最佳方式是哪种方法在它们之间共享很少的代码?我应该创建多个推送网站,每个项目一个?
请在答案中包含有关如何使用您首选的存储库设计版本重新创建我的release-tag,bugfix分支的说明.
编辑:我想安装尽可能少的扩展.
EDIT2:
鉴于此SVN布局:
.
|-- project-a
| |-- branches
| | |-- 1.x
| | `-- feature-1
| |-- tags
| `-- trunk
`-- project-b
|-- branches
|-- tags
| |-- 1.0
| `-- 1.1
`-- trunk
Run Code Online (Sandbox Code Playgroud)
(谢谢@bendin!:))
使用多个hg推送存储库更好吗?
project_a-trunk
project_a-1.x
project_a-feature-1
project_b-trunk
Run Code Online (Sandbox Code Playgroud)
对于分支机构.标签被折叠到适当的分支中.
或者你宁愿在这个例子中使用两个推送存储库
project_a
project_b
Run Code Online (Sandbox Code Playgroud)
使用命名分支,因此在一个回购中有多个头.
我看到多头回购的优点是我不必去寻找多个回购中的标签.我看到的缺点是,hg书似乎不鼓励多头回购.你会怎么做?
ben*_*din 12
一些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
Run Code Online (Sandbox Code Playgroud)
这种布局在mercurial中没有直接的类比.每个具有自己的发布周期和自己的版本号的项目都应该有自己的存储库.
一些subversion存储库的结构是通过为每个项目提供自己的trunk,tags和branches来实现这一点:
.
|-- project-a
| |-- branches
| | |-- 1.x
| | `-- feature-1
| |-- tags
| `-- trunk
`-- project-b
|-- branches
|-- tags
| |-- 1.0
| `-- 1.1
`-- trunk
Run Code Online (Sandbox Code Playgroud)
您可以将每个项目视为物理subversion存储库中的逻辑存储库.每个项目都有自己的主干,标签和分支.这样做的好处是可以使标记和分支名称更短,因为您已经知道它们属于哪个项目.
使用像mercurial这样的工具来表达这种布局也是微不足道的.每个"项目"都成为一个多变的存储库.该存储库中的标记和分支是该项目的标记和分支.
像bendin说的那样,你应该创建多个存储库,每个独立项目一个作为开始.
Mercurial提交是一个存储库范围的级别,您不能只签出一个子目录.这与Subversion不同,它允许您通过仅提交一些文件来进行一致的提交,但是它还允许您只签出一个子目录.
进行发布时,通常会在Mercurial存储库中添加一个标记(hg tag).您可以自由决定是否要为每个版本保留一个错误修复存储库,如果您想在第一次需要时创建它们.诀窍在于
% hg clone -r 1.0 project-a project-a-1.0.x
可用于创建project-a-1.0.x仅具有标记之前的历史记录的存储库1.0.然后,您可以修复该错误project-a-1.0.x并将其推回project-a.可以在project-a-1.0.x存储库中进一步修复错误.