Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Mercurial设置:一个中央回购还是几个?_Mercurial - Fatal编程技术网

Mercurial设置:一个中央回购还是几个?

Mercurial设置:一个中央回购还是几个?,mercurial,Mercurial,我的公司正在从Subversion转向Mercurial。我们的产品使用.NET。我们有一个解决方案,其中有十几个项目是独立的模块,彼此之间没有依赖关系。我们在一台服务器上使用一个中央repo,并使用push/pull进行集成构建 我想弄清楚我是应该创建一个包含所有项目的中央回购协议,还是应该为每个项目创建一个单独的回购协议。单独回购协议的一个理由是,将单个模块分支会更容易,但单一回购协议的一个理由是更容易管理和工作流 我对hg和DVCS非常陌生,因此非常感谢您的指导 埃塔:在hgint.com

我的公司正在从Subversion转向Mercurial。我们的产品使用.NET。我们有一个解决方案,其中有十几个项目是独立的模块,彼此之间没有依赖关系。我们在一台服务器上使用一个中央repo,并使用push/pull进行集成构建

我想弄清楚我是应该创建一个包含所有项目的中央回购协议,还是应该为每个项目创建一个单独的回购协议。单独回购协议的一个理由是,将单个模块分支会更容易,但单一回购协议的一个理由是更容易管理和工作流

我对hg和DVCS非常陌生,因此非常感谢您的指导

埃塔:在hgint.com上,乔尔说:

[一] 如果你习惯了有一个大的 庞大的整体存储库 公司,有些人只检查 找出并处理以下子目录: 他们关心,这不是一个很好的选择 与Mercurial合作的好方法你是 最好有很多小的 每个项目的存储库


如果有人能就此展开讨论或向我提供更多文档,那就太好了。

您应该考虑的一点是,Mercurial不支持像subversion那样签出目录。一个典型的subversion设置是有一个巨大的repo,其中包含多个独立的项目,当有人需要代码时,他们只需签出包含该项目的子目录。你不能在mercurial中这样做。你要么接受整个回购协议,要么什么都不做。如果从事这些项目的每个人都不需要所有的代码,那么您可能希望将其拆分为单独的存储库


编辑:链接可能有助于设置内容,特别是“发布多个存储库”部分。

我本人对Mercurial相当陌生(我的公司正在从SourceSafe跨越),因此我不知道还有什么经验可以说

对我来说,每个VisualStudio解决方案有一个存储库是有意义的。如果您的模块确实互不依赖,为什么它们都在同一个解决方案中?如果您有一个很好的理由将它们都放在一个解决方案中,那么这可能就是将它们放在一个存储库中的原因。如果没有一个很好的理由将它们放在一个解决方案中,那么对我来说,存储库和每个解决方案都更有意义

编辑:因此,由于所有模块都构建在一起,需要集成,这将推动我走向单一解决方案和单一存储库


Mercurial在合并方面做得很好,但我遇到的一个问题是在一次合并多个项目时遇到的解决方案文件。它与多个
结束项目
行混淆。因此,只要你不经常添加新项目,你的合并就应该是顺利的。

如果完全独立的回购协议对你不起作用,你可能会将每个项目作为某个伞式回购协议的子回购协议。我不得不说,鉴于每个项目听起来完全独立,单独回购听起来像是你需要的

根据我的经验,而不是基于研究等,我会说每个逻辑blob都是一个存储库。如果在子项目之间共享代码,则它们需要位于同一回购协议中。将有完整的subrepo功能,但目前(2010年4月)尚未完全实现。

我团队中的开发人员都是SVN用户,所以他们的思路是“签出”。他们认为,“如果我在处理调度程序代码,开发人员提交图表代码,我需要图表代码。我如何获得它?”有一个repo,这很容易。但是对于多个repo和维护人员,工作流程是什么?这可能是一个发现问题,即开发人员如何知道要克隆哪个存储库以及它在哪里?我在我的帖子中添加了一个链接,其中包含一些关于设置和发布多个存储库的信息。对于我们(java with maven)来说,mercurial repos在拆分为尽可能最小的逻辑单元时效果最好。所以在实践中,如果我们有一个项目的API,那么它就被放入了它自己的回购协议中。Impl代码在它自己的回购协议中。这个工作流程需要巧妙地使用subrepo,和/或经常访问存储库的习惯。工作流在CI方面是有益的,因为这样设置很容易,反馈循环也很快。我们通过来自CI的RSS源等方式进行变更发现。人们总是可以很容易地看到某个东西是否/何时发生了变化,因为它经历了CI周期。它们在同一个解决方案中,因为该解决方案有点像“集成构建”。由于该应用程序是WPF应用程序,测试UI元素需要运行整个项目,并将所有模块集成在一起。如果有一些通用组件,那么这些组件可以存储在单独的repo中,并包含在每个项目中。通过这种方式,不需要复制粘贴模块,但仍然可以使库代码靠近项目。我认为不支持递归子repo,所以不一定要用这种方式处理复杂的依赖关系。