我有一个数字,我想版本控制准相关的项目。 在SVN我会在一个项目内将它们设置为多个目录
/scripts #updates in sync with project1 & project2
/project1 #requires database
/project2 #requires database
/database
当然其他SVN布局可能对这种玩具的例子,但这种布局的优点:
- 我可以分支之间拷贝文件,同时保留历史
- 我也只能检出的项目的一个子集,如
svn co repo/project2; svn co repo/database
svn co repo/project2; svn co repo/database
。 这节省了大量的存储和时间,如果PROJECT1大。 - 易仓库管理,因为用户访问的所有项目定义一次
这种模式没有很好地映射到善变的,因为你不能克隆一个善变的回购协议的一个目录 。 所以我的问题是:什么是存储大,密切相关的项目,在善变的最常用的方法是什么?
我的想法:
- 多个库 - 丢失文件的历史当中的项目之间移动
- 森林 -似乎止步不前,而我不知道该如何扩展是稳定
- 与大多不相关的内容命名分支
- SubRepos -不幸的是,我运行Ubuntu 9.04,仅船舶HG 1.1.2。 否则,这看起来像一个很好的选择
多个库,森林和SubRepos是相同的想法的所有变体。 森林和SubRepos只是使管理也使用其他项目的非常最新版本更容易的项目,他们没有解决已经具备了基本的问题,这是你的项目之间移动时他们失去文件历史记录。
在我看来,最好的办法是把所有的目录,在同一仓库,等待水银功能,让子目录结账。 子目录的特点是一个Mercurial的团队关心,但它并不容易做到要么,这就是为什么它尚未完成。 我知道水银内部,虽然,这是绝对可行的,只是很多的工作。
第二个最好的选择,但我认为这是十分可怕的,是你提到的命名分支的想法。 只要你想,虽然复制分支之间的文件你仍然有一个非常奇怪的合并操作来执行。 您将执行以下步骤:
- 更新到要将该文件复制到分公司的头:
hg update -C project1
- 在分支合并想要将文件从复制:
HGMERGE=/bin/false hg merge -r project2
- 恢复到分支的头,你要复制的文件到:
hg revert -a --no-backup -r project1
- 还原特定文件,你希望从合并分支的最新修订版复制:
hg revert --no-backup -r project2 path/to/file/in/project2.txt
- 将文件移动到它在你想要把它复制到分支地点:
hg mv path/to/file/in/project2.txt project1/file/path/project2.txt
- 标记合并为解决:
hg resolve -am
- 最后提交的结果:
hg commit -m "A merge to copy project2.txt to project1."
正如我所说的,非常难看。 而且它很可能只在1.3汞很好地工作,因为我知道在复归的相互作用一些重要的错误,合并和决心相当最近是固定的。 (恕我直言,我怀疑Ubuntu是故意落后于非bzr的版本控制系统的版本。)
多久你真的希望成为项目之间复制文件? 为什么会发生这种事? 你肯定失去历史将是糟糕的事情?
我已经做了Subversion中类似的东西了几个我自己的项目,但我的经验是我的初步感觉该项目有关的东西真的属于中通常是正确的,当它不保存历史是不是真有那么大由于历史上的交易是真的只有原来的项目中的文件是无论如何有关。