Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net git中的web.config和app.config机器特定设置_.net_Git_Configuration_Web Config_App Config - Fatal编程技术网

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

.net git中的web.config和app.config机器特定设置,.net,git,configuration,web-config,app-config,.net,Git,Configuration,Web Config,App Config,我们在不同的办公室有多个开发团队,他们在我们的项目的web.config和app.config文件中需要不同的配置设置值 我们希望使用一组合理的默认值来签入这些配置文件,这样通过签出主干/主分支,您就可以在不需要到处寻找配置文件的情况下工作 历史上我们使用过Subversion,特别是OrtoiseSVN,这提供了一种管理本地更改的简单方法:我们只需将这些文件添加到OrtoiseSVN的自动提交时忽略更改列表中。这可以防止意外签入这些文件,因为您需要专门选择它们以将它们包含在签入中(并且您可以确

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

我们希望使用一组合理的默认值来签入这些配置文件,这样通过签出主干/主分支,您就可以在不需要到处寻找配置文件的情况下工作

历史上我们使用过Subversion,特别是OrtoiseSVN,这提供了一种管理本地更改的简单方法:我们只需将这些文件添加到OrtoiseSVN的自动
提交时忽略
更改列表中。这可以防止意外签入这些文件,因为您需要专门选择它们以将它们包含在签入中(并且您可以确保签入的是重大更改,而不是本地配置)。这种方法的主要缺点是,配置文件总是看起来“已更改”,因此不可能一眼就知道是否有任何本地更改

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

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

选项1:签入xxx.sample文件和.git忽略实际的配置文件:例如,在中建议这样做。我看到的主要问题是,对配置文件的更改很容易被忘记,在两个不同的点上:提交者很容易错过他们需要添加到
.sample
文件中的更改,以及使用者(特别是continuous integration server)很容易错过需要从
.sample
文件合并到本地配置文件中的更改。所以基本上,这似乎不是一个很好的解决方案

选项2:有一个签入的xxx.defaults文件和一个覆盖其定义的任何设置的.git忽略的xxx.local配置文件:这是提供的,例如。问题是我们正在与标准的.Net配置提供商合作——我真的不希望我们在Mirosoft已经完成所有工作的情况下实现一个全新的设置加载框架。有人知道如何获取app.config和web.config文件以引用可选的本地覆盖文件吗

选项3:让开发人员保留本地分支,然后让他们始终将cherry Pick或重定基础的分支签入master,以始终绕过/避免其本地分支中不需要的提交:这是一种可能的工作流,尽管我欣赏它在更改跟踪方面的清洁性(所有已签入的内容),它会在每次签入时引入大量必需的开销;这是一个巨大的痛苦

选项4:签入配置文件,但将其标记为
——假设未更改
:这是一个可能的选项;据我所知,它与TortoiseSVN中的
提交时忽略
变更列表在精神上非常相似,只是您看不到这些“隐藏的”在提交过程中更改了文件;例如,TortoiseGit确实会用“更改”图标覆盖显示文件,但在提交对话框中文件根本不会显示。这似乎有点可怕,很容易忘记检查更改

考虑到这些选项(我找到的都是这些选项),我真的希望有一种方法可以选择性地将本地配置文件“包含”到签入的app.config/web.config文件中,并使用选项2;是否有人知道这样做的方法,或者我缺少的其他选项?(我隐约想考虑一个定制的XML合并预构建步骤…)

我应该在前面提到,我们仍然使用VS2008,所以配置转换不可用


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

更新2:我删除了我以前的更新和答案,这很愚蠢/不起作用。我没有意识到,在“我们的”合并之后,另一个方向的下一个合并会将这些文件的“原始”版本带回来(覆盖本地分支更改);如果您感兴趣,请参阅编辑历史记录。这个问题与以往一样开放。

我将通过查看找到一个潜在的解决方案。我使用mercurial并使用相同的过程签入一个通用的web.config文件,并使用web转换更改
configSource
的位置,以指向我的部署特定内容

使用此路由的优点是它完全内置于框架中,不需要额外的代码,并且可用于web部署

已签入web.config:

<?xml version="1.0"?>
<configuration>
  <!-- snip -->
  <connectionStrings configSource="config/connectionStrings.config" />
</configuration>

已签入web.debug.config:

<?xml version="1.0"?>
<configuration>
  <connectionStrings
      configSource="config/dev.connectionStrings.config"
      xdt:Transform="Replace(configSource)" />
</configuration>


我默认签入了一个
config/connectionStrings.config
,但是开发服务器
config/dev.connectionStrings.config
没有签入,也没有在新的部署中替换它。

我想建议您看看。我们在所有的项目中都使用它,它对所有开发人员和用户都非常有效我们的所有环境。它基本上运行一个电子表格,其中说明机器名称和输出配置文件,然后标记模板App.Config或Web.Config,将电子表格中的值替换到其中。向项目添加一个简单的预构建步骤以运行configgen,在构建开始之前,您有一个定制的配置n文件。它还支持默认设置

看一看这个网站,做出你自己的决定,但我绝对可以保证

编辑:值得注意的是,您可以忽略所有Web.config和App.config文件(以.git为单位)。但您确实需要将模板和电子表格添加到回购协议中。此外,我确信,在方式上有一个更新,很可能包括电子表格的xml替换,它有自己的编辑器,使其更适合于