Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Version control Web.config版本控制_Version Control_Web Config - Fatal编程技术网

Version control Web.config版本控制

Version control Web.config版本控制,version-control,web-config,Version Control,Web Config,目前,我正在为我们的开发使用一个共享数据库模型。我知道,最好使用本地开发数据库以正确的方式进行数据库版本控制,而不让一个开发人员破坏其他人的代码。这就是我想说的。不过,我对web.config文件有一个问题。如何确保每个开发人员拥有自己的本地开发数据库后,不必在每次从源代码管理获得更新时手动更改DB连接字符串?最好的方法是什么 例如,假设Johnny Dev提交其web.config,其中包含如下连接字符串: server=JohnnysBox;database=JohnnyAppDev1;

目前,我正在为我们的开发使用一个共享数据库模型。我知道,最好使用本地开发数据库以正确的方式进行数据库版本控制,而不让一个开发人员破坏其他人的代码。这就是我想说的。不过,我对web.config文件有一个问题。如何确保每个开发人员拥有自己的本地开发数据库后,不必在每次从源代码管理获得更新时手动更改DB连接字符串?最好的方法是什么

例如,假设Johnny Dev提交其web.config,其中包含如下连接字符串:

server=JohnnysBox;database=JohnnyAppDev1;
现在Susie Dev得到更新,她必须将她的连接字符串更改为:

server=SUE;database=development;
因此,现在Susie和Johnny不断将自己的连接字符串提交到web.config文件,并且每次更新时,他们都必须更改所有应用程序中的连接字符串

处理这种情况的最佳方法是什么,这样开发人员就不会弄乱彼此的连接字符串设置,而是可以在必要时将其他类型的配置文件更改推送到所有其他开发人员(如新的应用程序设置)?

使用(本地)作为sql server名称,并且它始终指向本地服务器。这应该是您签入源代码管理的web.config中的默认值


对于生产“安装”,您的安装程序应该询问用户是否要使用远程sql server,如果是,则在安装过程中更新web.config文件。

对于配置或设置文件,您需要更新的版本是:

  • 模板文件(
    server=@USER\u NAME@;database=@database\u NAME@;
  • 一个或多个值文件
  • 一个脚本能够用正确的值替换变量

我们在这里要做的是永远不要将web.config文件提交给源代码管理。相反,我们提交一个web.config.sample文件,每个开发人员将该文件中的更改合并到他们自己的web.config文件中。处理这些合并是每个开发人员的责任。

我处理这种情况的方法就是不签入特定于开发人员的配置文件更改


当需要签入配置更改时,我从一个“干净”配置文件开始,进行必要的更改,然后签入。当其他所有人都执行“获取最新版本”时,他们可以将这些更改合并到本地版本。

这只是部分解决方案,但您可以让所有开发人员使用cliconfg为自己的SQL server创建别名

那么源代码管理中的web.config将具有以下内容:

server=LocalServerAlias;database=development

我们在我的办公室提出的解决方案是,我们明确地将web.config从版本控制中排除,但只在www文件夹中。这允许开发人员在本地进行他们需要的任何更改


在一个单独的文件夹中,我们有一个web.config的“主”副本,受版本控制。添加新的节、键等后,开发人员有责任更新主副本。

您可以根据应用程序运行的环境创建多个Web.config文件。使用转换语法,您可以修改主Web.config以包括或符合您自己的本地设置


然后,从存储库中排除此自定义Web.xxx.config。

我们将Web.config分支。所以,我有一个名为Mattweb.config的,我可以随意更改它,它只用Mattweb.config的内容替换本地机器上的web.config。这不需要我干预


我们还将“real”web.config分支,以便我可以与自己的本地版本进行比较,查看是否添加了任何appsettings或任何其他类型的更改。然后我只更新我的Mattweb.config文件,一切都好了。

如果开发人员的机器上没有安装SQL server怎么办?配置文件中还有许多其他东西,可能是开发人员机器特有的。@Mark-OP特别询问了所有开发人员都有自己的本地开发人员的场景数据库已安装。我同意这一点。我们的大多数开发人员都有一个“不签入”变更列表,其中只进行本地web.config更改。如果需要对配置进行实际的生产更改,开发人员将恢复、签出并进行小更改等。开发人员如何知道何时需要合并这些更改?我可以看到一个开发人员很容易地进行更新,却没有意识到web.config.sample文件已经更新,只是忽略了一个事实,即设置已经被添加/删除/更改。当然,我没有神奇的解决方案。如果您的开发人员盲目更新文件并忽略结果,那么您可能会有更深层次的问题需要首先解决。好的,那么如果添加了新变量怎么办?开发人员如何知道添加了一个新变量,该变量需要在其特定的值文件中有一个值?@Brandon:他会知道,因为脚本(也有版本)不会生成最终文件,除非该值文件正确地完成/修改了所述的新值。我最后编写了一个Python脚本来实现这一点,现在我们所有的开发人员都在使用这个模型,到目前为止,它工作得非常好。它有助于我们防止web.config更改破坏他人的代码,但也有助于我们进行部署。