我有一个长期存在的问题:在工作中,我们使用mercurial作为分布式源代码管理工具,但是我们无法弄清如何保持配置文件同步。
问题在于,我们想要跟踪配置文件,并且希望能够在开发人员之间交换配置文件内容,但每个开发人员都希望其connectionStrings部分独立于其他人。
是否有可能在跟踪配置文件的同时忽略连接字符串部分的拉取和推送?
我们尝试将配置文件添加到.hgignore中,但当有人向配置文件中添加重要内容时,我们必须通过电子邮件共享它。
谢谢。
tX
是主线,c1
是自定义)。t1-t2-t3-t4-...-tN
\ \ \ \
c1---c2-----c3--c4
开发人员需要推送只有tX
作为父级的更改,cX
不应逃离版本库。
config_local
的文件来保存开发人员特定的设置。将该文件添加到.hgignore
中。常见设置放入主配置文件中,然后再包含config_local
文件。<connectionStrings configSource="connections.config" />
如果你有一个 connections.config
文件包含连接字符串,你可以将其从代码仓库中排除,以便让每个开发人员随心所欲地进行修改。
如果你想要一个“参考”版本的 connections.config 文件,只需添加另一个文件 connections.example.config
,并将其纳入源代码管理,然后将其用作模板版本。
非分布式版本控制系统的处理方式是设置您的构建过程从单独的配置文件中读取连接字符串,然后在构建过程中进行预处理(在Java中,您可以使用Ant或Maven从属性文件中过滤,我不知道MS-land的情况)。
这有点不太正规,但你可以使用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文件中设置,以防用户不想设置自己的私有连接字符串。