最初将重大项目提交给mercurial

时间:2014-03-27 03:48:41

标签: delphi version-control mercurial pre-commit

我有超过10年的软件项目,我想向Hg承诺。

这是针对与Delphi 7相关的代码,包括第三方许可库,使用svn管理的开源库,以及我自己的代码(我计划迁移到Delphi XE5)。

第三方和svn派生的lib通常在Delphi IDE中安装了组件,并且应保存在"最新的"版本(作为回滚通常会使IDE出现问题),所以我只是备份它们(它们是svn外部,从未得到回滚)。

我的布局如下:

-Licensed
  |-(third party libs)
  ...
-SVNRoot
  |-(various open source from svn)
  ...
-CodeRoot
   |
   |-common       (common to all projects)
   |
   |--major1
   |    |
   |    |-common      (common to the major1 software)
   |    |     
   |    |-Cust1       (projects for customer1)
   |    |  |
   |    |  |-C1Proj1
   |    |  | 
   |    |  |-C1ProjN 
   |    |     
   |    |-Cust2
   |       |
   |       |-C2Proj1
   |       | 
   |       |-C2ProjN 
   |
   |--major2
   |    |
   ...  ... 

即#"普通"包含我通常包含在所有项目中的代码的文件夹,无论它们在何处部署。

然后按主要产品细分,由客户定制子项目。

我已经阅读了各种教程,但我似乎错过了一些东西......

我看到如何通过移动到.. \ CodeRoot并运行Hg Init,将CodeRoot下的所有内容添加到本地存储库。

我不清楚,我很高兴将所有内容都放在一个存储库中。

OTOH,如果最顶层"常见"文件夹不是所有内容,我有一个问题。

"普通"每个重大项目下都有同样的问题。

我还不确定我的"粒度"应该是 - 每个MajorProject或每个CustProject的存储库。

所以 - 问题:

1)如果我按照"每个MajorProject" - 如何处理最顶层"常见"文件夹?

2)如果我按照"每个CustProject" - 如何处理最顶层和每个主要项目的常用文件夹(如果它们的处理方式与最顶层不同)

3)最后,如果我想创建一个远程中央存储库(而不是本地存储库),在将其本地克隆到我的机器之前,如何安全地将我的所有文件移动到远程中央存储库?

TIA。

干杯, EDB

2 个答案:

答案 0 :(得分:2)

我绝对不会将所有内容都放在一个存储库中,尽管您可以在顶级内部使用子存档。然而,我并没有使用过这些。

我建议将它拆分成有意义的最小块。如果您以后决定实际需要更大的分组,则可以随时从多个repos中提取新的仓库。

关于将文件放入中央,服务器持有的回购。只需推送它,或从您当地的仓库服务器克隆。

答案 1 :(得分:2)

对于1)和2),它们都可以用子存储库来回答。主存储库也是一个存储库,因此您的公共文件夹将由主存储库处理,所有主要项目都将位于自己的子存储库中。

现在,选择您是否希望将子回购用于客户取决于您。

至于3),一旦你拥有本地仓库,就可以在你想要使用的中央存储库上进行克隆。对于Mercurial,一旦克隆了一个回购,它本身并不知道它是一个克隆。它们通过互惠路径相连,但克隆与原始路径没有任何不同!