2009-09-04 33 views
7

我有一个长期存在的问题:在工作中我们使用mercurial作为DSCM,但我们无法弄清楚如何保持我们的配置文件同步。Mercurial工作流问题(如何处理配置文件)

问题是,我们想要跟踪配置文件,并希望能够在开发人员之间交换配置文件内容,但每个开发人员都想让他的connectionStrings部分独立于其他人。

是否有可能以某种方式保持配置文件跟踪,但省略连接字符串部分时拉和推?

我们尝试添加配置文件到.hgignore,但是当有人添加一些重要的配置文件,我们必须通过电子邮件分享。

谢谢。

回答

6

如果您无法通过自定义设置来处理它,只需在回购库中拥有一个基本配置文件即可。

然后让每个开发人员把它自己的定制放在最上面(用mq)。如果定制不太侵入,合并总是会顺利的。

还有另外一种方法,按下时,你要记住不要推合并分支,你多次合并您的自定义,但后来(tX是主线,c1是定制)

t1-t2-t3-t4-...-tN 
    \ \  \ \ 
    c1---c2-----c3--c4 

的开发需求并推动只有tX作为父母的变更,cX绝对不应该逃避回购。

1

处理它的非DVCS方式是设置你的构建过程,从独立的配置文件中读取连接字符串,然后在构建过程中对其进行预处理(在java中,你可以使用ant或maven从属性文件,我不知道MS-land)。

4

我不知道您的配置文件的详细信息,但如果您可以包含其他文件,请创建一个config_local文件以保存开发人员特定的设置。将该文件添加到.hgignore。常用设置进入主配置文件,其中包括config_local文件。如Ken所说,如果包含不是一个选项,那么在构建步骤中预处理可能是一条可行的路。

3

您可以使用Mercurial Queues来做到这一点。所以你要做的是在hg下(具有真实姓名)拥有“真实”配置,开发人员可以使用位于顶部并使用mq维护的补丁来维护其定制。

然后,当开发人员需要更新真实配置时,他们会弹出他们的补丁程序,它将所有自定义项保存在堆栈中,对配置进行更改并提交+推送它。

假定所有其他开发人员都没有在自己的队列中重写这些特定更改,他们将在下次更新时收到它们。

0

这有点混蛋,但您可以使用KeywordExtension自动扩展令牌。在你的配置文件中加入这样的内容:

db.host = $DBHOST$ 
db.host = $DBUSER$ 
db.host = $DBPASS$ 

然后在他们〜/。hgrc文件的用户应该是这样的:

[extensions] 
hgext.keyword= 
[keyword] 
# expand keywords in all python files in working dir 
**.conf = 
[keywordmaps] 
DBHOST = dev.server.internal 
DBUSER = myname 
DBPASS = mypass 

生产,当然会有它自己的.hgrc。

该计划将花费每个人一点点设置时间一次,但之后它应该是自动的。如果用户不想设置自己的专用连接字符串,默认设置可以在系统方面的/ etc/mercurial/hgrc文件中。

1

将连接字符串放在不同的文件中。例如在web.config中:

<connectionStrings configSource="connections.config" /> 

然后你有一个connections.config文件,连接字符串,您可以从储备库中排除,从而让每个开发人员修改自己的心脏的内容。

如果你想要一个'reference'版本的connections.config文件,只需添加另一个在源代码控制下的文件connections.example.config,并将其用作你的模板版本。