2013-07-06 37 views
4

我有一个非常相同的应用程序正在开发两个机构。除了单个属性文件中的名称之外,所有代码都是100%相似的。将来,这两者之间也需要共同进行改进。是否有可能在一个git存储库下管理这两个应用程序的源代码,以便改进和错误修复将非常容易,但会有不同的属性文件?git为两个应用程序与一个不同的文件

+0

我认为你应该计划一个发布脚本,对文件进行重命名 –

回答

6

是的,使用分支机构。

首先提交一切,这是常见的,包括公共(可能永远不会成为实际使用的)文件的版本问题:

(1) 

然后,创建一个分支,并添加修改该文件:

(2) <-- customer A 
/
(1) 

然后更新回原来的变更,并与其他更改了同一个文件创建另一个分支:

(2) <-- customer A 
/
(1) 
    \ 
    (3) <-- customer B 

然后你从(1)分支向前发展,融入各个分支,你认为合适(顾客):

(2)---------(6)      <-- customer A 
/  /
(1)---(4)---(5)---(8)---(9)    <-- development trunk 
    \   \ 
    (3)---------(7)      <-- customer B 

注意,这可能很快变得难以处理,如果你有很多客户,或许多这样的小差异,可能有其他方式来处理差异,例如构建系统,将文件替换为构建的一部分,而不是具有N分支来处理这些细微差异。换句话说,如果差异与每个客户有权访问的品牌和功能相关,则构建系统会为每个客户准备不同的分配,这些分配已经使用正确的文件和配置进行配置。这根本不需要额外的分支(超出了你应该已经与开发,测试,生产等有关的部分)。

+0

非常清楚。这完全解决了我的问题,它只涉及两个客户。非常感谢你。 –

3

两个示例的方式来组织这两个项目:

对每个项目的一个分支。说,master-amaster-b。两者都遵循master的字母,只有它们每个都有一个额外的提交,其中每个项目都有自定义属性文件。

更简单的解决方案:根本不要在Git存储库中包含目标属性文件。编写一个配置工具,将在部署时参数化属性。

5

在这种情况下,我不会在版本控制下放置配置文件 - 只需在README中声明应该提供基于给定示例模板的配置文件,例如,数据库凭证。

如果模板发生变化,您只需更新自述文件。

2

如果仅涉及单个文件,我发现为每个客户使用一个分支是多余的。

我会做到这一点是忽略了配置文件的方式(姑且称之为conf.properties)和versionning一个名为conf.properties - 距离包含默认配置信息。
您将部署的代码将相同,您只需要cp conf.properties{-dist,}并编辑conf.properties以及有关该机构的信息。这些步骤通常是在第一次部署之后进行一次,并且随着时间的推移保持不变。

相关问题