Mercurial工作流问题(如何处理配置文件)

7

我有一个长期存在的问题:在工作中,我们使用mercurial作为分布式源代码管理工具,但是我们无法弄清如何保持配置文件同步。

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

是否有可能在跟踪配置文件的同时忽略连接字符串部分的拉取和推送?

我们尝试将配置文件添加到.hgignore中,但当有人向配置文件中添加重要内容时,我们必须通过电子邮件共享它。

谢谢。

6个回答

6
如果您无法通过自定义设置来处理它,只需在存储库中有一个基本配置文件。然后让每个开发人员在其上面添加自己的定制(使用mq)。如果定制不太繁琐,则合并将始终顺利进行。
还有另一种方法,您可以重复合并自定义,但是在推送时必须记住不要推送合并分支(tX是主线,c1是自定义)。
t1-t2-t3-t4-...-tN
  \    \      \   \
   c1---c2-----c3--c4

开发人员需要推送只有tX作为父级的更改,cX不应逃离版本库。


4
我不知道你的配置文件的详细信息,但如果可以包含其他文件,那么创建一个名为config_local的文件来保存开发人员特定的设置。将该文件添加到.hgignore中。常见设置放入主配置文件中,然后再包含config_local文件。
正如Ken所说,如果无法包含文件,则在构建步骤期间进行预处理可能是解决问题的方法。

3
您可以使用Mercurial Queues来实现。具体操作是,在hg下拥有“真实”的配置文件(以其真实名称命名),开发人员可以使用mq维护自己的定制补丁,这些补丁位于原始配置之上。
然后,当开发人员需要更新真实配置时,他们将所有自定义内容保存在一个补丁中,然后弹出该补丁并对配置进行更改,最后提交+推送。
假设其他开发人员没有覆盖他们自己队列中的特定更改,则他们会在下次拉取+更新时接收到这些更改。

1
将您的连接字符串放在不同的文件中,例如在web.config文件中:
<connectionStrings configSource="connections.config" />

如果你有一个 connections.config 文件包含连接字符串,你可以将其从代码仓库中排除,以便让每个开发人员随心所欲地进行修改。

如果你想要一个“参考”版本的 connections.config 文件,只需添加另一个文件 connections.example.config,并将其纳入源代码管理,然后将其用作模板版本。


1

非分布式版本控制系统的处理方式是设置您的构建过程从单独的配置文件中读取连接字符串,然后在构建过程中进行预处理(在Java中,您可以使用Ant或Maven从属性文件中过滤,我不知道MS-land的情况)。


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文件中设置,以防用户不想设置自己的私有连接字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接