.net - git中的web.config和app.config机器特定设置

标签 .net git configuration web-config app-config

我们在不同的办公室有多个开发人员团队,他们在项目的web.configapp.config文件中的许多配置设置需要不同的值。

我们希望使用一组明智的默认值来使这些配置文件保持 checkin 状态,以便通过 check out trunk / master分支,您可以进行某些工作而无需深入研究配置文件。

历史上我们使用Subversion,尤其是TortoiseSVN,这提供了一种管理本地更改的简便方法:我们只是将这些文件添加到TortoiseSVN的自动ignore-on-commit更改列表中。这样可以防止意外检入这些文件,因为您随后需要专门选择它们以将它们包括在检入中(并且可以确保您检入的是重要更改,而不是本地配置噪声)。这种方法的主要缺点是配置文件总是看起来“已更改”,因此无法一目了然地知道您是否进行了任何本地更改。

我们正在寻求切换到Git,而我正在尝试找出最佳方法。

首先,其他StackOverflow答案中已有的内容:

选项1:检入xxx.sample文件和.gitignore实际的配置文件:建议在this answer中使用它。我看到的主要问题是,很容易在两个不同的地方忘记了对配置文件的更改:提交者很容易错过需要添加到.sample文件中的更改,而使用者(尤其是持续集成服务器)可以轻松地错过了需要将其从.sample文件合并到其本地配置文件中的更改。因此,基本上,这似乎不是一个很好的解决方案。

选项2:有一个 checkin 的xxx.defaults文件和一个.gitignored xxx.local配置文件,该文件将覆盖它定义的的所有设置:例如,here。那里的问题是我们正在与标准.Net配置提供程序一起使用-我真的不希望我们在Mirosoft已经完成所有工作之后实现一个全新的设置加载框架。有谁知道一种方法来获取app.config和web.config文件以引用可选的本地替代文件?

选项3:让开发人员保留本地分支,然后让他们始终将樱桃签或重新建立基础的分支检入master,以始终绕过/避免在其本地分支中进行不需要的提交:这是作为可能的工作流here提供的,并且尽管我很欣赏变更跟踪(所有已 checkin 的内容)的清洁性,但每次 checkin 都会带来大量的必需开销;这是一个很大的痛苦!

选项4: checkin 配置文件,但用--assume-unchanged标记它们:这是可能的选项here;据我所知,它在本质上与TortoiseSVN中的ignore-on-commit更改列表非常相似,除了您在提交过程中无法看到这些“隐藏”的更改文件之外;例如,TortoiseGit确实显示了带有“更改”图标覆盖的文件,但是在提交对话框中,该文件根本没有显示。这似乎有点令人恐惧,再次很容易忘记检查更改。

有了这些选项,这些都是我所找到的,我真的很希望找到一种方法,可以选择将本地配置文件“包含”在已 checkin 的app.config / web.config文件中/之上,并与一起使用选项2 ;有谁知道这样做的方法,或者我所缺少的其他选择? (我很想考虑一个自定义的Xml合并预构建步骤...)

我应该在前面提到过,我们仍在VS2008上,因此不提供Configuration Transforms。

更新:(已删除,是完全错误的)

更新2:我已经删除了以前的更新和答案,这很愚蠢/无法正常工作。我没有意识到,在“我们的”合并之后,另一个方向的下一次合并会将这些文件的“原始”版本带回(覆盖本地分支更改)。如果有兴趣,请参阅编辑历史记录。这个问题一如既往。

最佳答案

我建议您看看ConfigGen。我们在所有项目中都使用它,它为所有开发人员和所有环境带来了奇迹。它基本上是从一个电子表格开始的,该电子表格指出机器名称和输出配置文件,然后标记一个模板App.Config或Web.Config,将电子表格中的值替换为它。在您的项目中添加一个简单的预构建步骤以运行configgen,然后在构建开始之前,为您的计算机量身定制一个配置文件。它还支持默认设置。

看一下该网站,然后下定决心,但我绝对可以保证。

编辑:值得注意的是,您然后可以忽略所有Web.config和App.config文件(以.git表示)。但是您确实需要将模板和电子表格添加到存储库中。此外,我可以肯定的是,该方法已经进行了更新,其中可能包括电子表格的xml替换,它具有自己的编辑器,非常适合DVCS。

Edit2 :也可以在此处查看Daniel的帖子:https://stackoverflow.com/a/8082937/186184。他给出了模板和电子表格的一个非常清晰的示例,以及如何使其在您的解决方案中正常工作。

关于.net - git中的web.config和app.config机器特定设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142213/

相关文章:

php - Git 无法通过 ssh Deployer 克隆项目

Git merge 策略 : spaces make default shows no conflict and bring unexpected results

c# - 需要帮助解决我在使用 Linq-to-Objects 查询时遇到的性能问题吗?

git clone - 致命的 : remote error: access denied or repository not exported

Apache 未在 linux mint 中启动

java - netty 4客户端ssl配置请求所有https站点

elasticsearch - 通过Ansible或Fig运行docker中的传递参数(例如-Des.node.name =“TestNode”)

.net - RichTextbox - 行长度选择问题

c# - C#中判断文件或目录是否有删除权限

c# - 如何将一个类移动到另一个包中?