我们希望将这些配置文件与合理的默认值一起检入,这样通过检出主干/主分支,您就可以获得一个可工作的东西,而无需查找配置文件。
历史上,我们使用过Subversion,特别是TortoiseSVN,这提供了一种管理本地更改的简单方法:我们只需将这些文件添加到TortoiseSVN的自动忽略提交更改列表中。这可以防止意外检入这些文件,因为您需要明确选择它们才能包含在检入中(并且您可以确保您正在检入重要更改,而不是本地配置噪音)。这种方法的主要缺点是配置文件始终看起来是“已更改的”,因此无法一眼知道是否有任何本地更改。
我们正在考虑切换到Git,并试图找出最佳方法。
首先,其他StackOverflow答案中已经有的内容:
选项1:将实际的配置文件放入xxx.sample文件和.gitignore中:这是推荐的做法,例如在此答案中提到。我看到的主要问题是,配置文件的更改很容易被忘记,在两个不同的点上:提交者很容易错过需要添加到.sample
文件中的更改,消费者(特别是持续集成服务器)很容易错过他们需要从.sample
文件中合并到本地配置文件中的更改。所以基本上,这似乎不是一个非常好的解决方案。
选项2:有一个已检入的xxx.defaults文件和一个.gitignored xxx.local配置文件,覆盖其定义的任何设置:例如,在这里提供了这种方法。问题在于,我们正在使用标准的.Net配置提供程序-当微软已经完成所有工作时,我真的不希望我们实现一个全新的设置加载框架。是否有人知道如何让app.config和web.config文件引用可选的本地覆盖文件?
选项 3: 让开发人员保留本地分支,然后始终将樱桃挑选或变基分支检入主干,以始终绕过/避免他们本地分支中不需要的提交: 这是一种可能的工作流程这里, 虽然我欣赏它在跟踪更改方面的整洁性(每个内容都被检入),但在每次检入时,它会引入大量的必需开销; 这真的很痛苦!
选项 4: 将配置文件检入,但将它们标记为--assume-unchanged
: 这是一种可能的选项这里; 就我所知,这与 TortoiseSVN 中的ignore-on-commit
更改列表非常相似,除了您在提交过程中无法看到这些“隐藏”的更改文件; 例如,TortoiseGit 显示具有“已更改”图标叠加的文件,但在提交对话框中,该文件根本没有显示出来。这似乎有点可怕,很容易忘记检查更改。
在这些可选项中,这是我找到的所有选项,我真的希望有一种方法可以选择性地将本地配置文件“包含”到已检入的app.config/web.config文件中,并使用选项2; 是否有人知道如何做到这一点,或者我遗漏了其他选项?(我微弱地考虑过一种自定义的Xml合并预编译步骤...)
我之前应该提到,我们仍在使用VS2008,因此无法使用配置变换。
更新:(已删除,是错误的)
更新2:我删除了之前的更新和答案,因为它很愚蠢/不起作用。 我没有意识到在进行“ours”合并后,在另一个方向上的下一次合并会将这些文件的“原始”版本带回(覆盖本地分支更改)。 如果您感兴趣,请查看编辑历史记录。 这个问题仍然是开放的。