Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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_Branching And Merging_Repository Design - Fatal编程技术网

Mercurial:多客户项目的存储库布局

Mercurial:多客户项目的存储库布局,mercurial,branching-and-merging,repository-design,Mercurial,Branching And Merging,Repository Design,我们为多个客户部署了此webapp产品,并考虑从svn切换到mercurial。在svn中,我们将主干视为我们的项目“核心”,而为每个客户设置分支 现在我想知道mercurial最好的回购安排是什么 假设项目基本上由三个主要文件夹组成:html,css,js 虽然/html的内容在客户中保持不变,但我们在/css和/js中进行了定制 目前,这些定制存在于单独的文件中,例如skin.css,因此我们可以清楚地从核心/公共文件的修复/更改中辨别出真正的故意定制 然后,SVN允许我们将部分更改从客户分

我们为多个客户部署了此webapp产品,并考虑从svn切换到mercurial。在svn中,我们将主干视为我们的项目“核心”,而为每个客户设置分支

现在我想知道mercurial最好的回购安排是什么

假设项目基本上由三个主要文件夹组成:
html
css
js

虽然
/html
的内容在客户中保持不变,但我们在
/css
/js
中进行了定制
目前,这些定制存在于单独的文件中,例如
skin.css
,因此我们可以清楚地从核心/公共文件的修复/更改中辨别出真正的故意定制

然后,SVN允许我们将部分更改从客户分支提交回主干,这样我们就可以在处理客户项目时修复全局内容。据我所知,mercurial目前不支持部分提交

那么,我们如何在mercurial中最好地处理这种情况呢? 我们是否应该有一个中央核心回购协议(可能有发行分支),并将客户项目克隆为单独的(远程)回购协议? 将所有核心和客户分支机构纳入一个回购协议是否更好


非常感谢你的指点

我会将项目分成两个回购协议:核心协议(html)和客户协议(css、js)。“核心”很容易理解。对于“customer”,我将从一组通用或备用样式开始。然后为每个客户复制通用样式。要为一个客户进行构建,您需要从核心和该客户克隆中提取。通过这种方式,不同的客户被隔离,但仍然通过通用样式相互了解。因此,如果您希望在所有客户中更改任何样式,您只需要提交通用样式,并让每个客户克隆。我不会让不同的客户进行完全不同的回购


单一回购的问题在于,每当你为一个客户克隆一个产品时,你都会随身携带一个不相关的部分(html)。意外的修改很容易泄露到html中。出于同样的原因,即使在SVN中,您的项目也可能被拆分为两个项目。

说“从核心和客户拉动”,您的意思是将它们设置为每个客户回购的子存储库吗?@Carsten,每当您为客户a构建时,您需要两个部分-核心(html)A的风格。不过,如何设置它们取决于你。我不知道你所说的“每客户回购的子存储库”是什么意思对不起,我有点不清楚。如果我没弄错的话,“客户A”可能也是回购“客户”的一个分支。现在,你会如何对待核心回购协议?在客户回购协议中,您是否会有一个Mecurial subrepo来检查“核心”?或者你会“只是”将核心文件拉到客户的工作副本中吗?@Carsten,这两种方式对我来说都很好。这取决于哪一个对您更重要-使从核心的拉取变得容易和自动,或者在客户和核心之间建立一个干净的隔离。@Kay:imho subrepos更适合,因为您可以指定跨核心的具体修订,仅使用不时的拉取可能会更难遵循。感谢您的反馈,帮助解决了这个问题!