Svn 如何在源代码管理中处理配置文件?

Svn 如何在源代码管理中处理配置文件?,svn,git,version-control,cvs,Svn,Git,Version Control,Cvs,假设您有一个典型的web应用程序和一个文件配置。每个在项目中工作的开发人员都将有一个版本用于他们的开发框,将有一个dev、prod和stage版本。在源代码管理中如何处理这个问题?根本不签入此文件,请使用不同的名称进行检查,或者一起执行一些奇特的操作?不要对该文件进行版本设置。对模板或其他文件进行版本设置。不要对该文件进行版本设置。版本一个模板或什么的。目前我有一个“模板”配置文件,带有一个附加的扩展名,例如: web.config.rename call "$(ProjectDir)\..\

假设您有一个典型的web应用程序和一个文件配置。每个在项目中工作的开发人员都将有一个版本用于他们的开发框,将有一个dev、prod和stage版本。在源代码管理中如何处理这个问题?根本不签入此文件,请使用不同的名称进行检查,或者一起执行一些奇特的操作?

不要对该文件进行版本设置。对模板或其他文件进行版本设置。

不要对该文件进行版本设置。版本一个模板或什么的。

目前我有一个“模板”配置文件,带有一个附加的扩展名,例如:

web.config.rename
call "$(ProjectDir)\..\..\MakeFileBehaveLikeUnchangedForGit.bat" "$(ProjectDir)Web.config.developer" "$(SolutionDir)"
call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config
但是,如果关键更改已更改,我可以看到此方法存在问题。

目前,我有一个“模板”配置文件,其中添加了扩展名,例如:

web.config.rename
call "$(ProjectDir)\..\..\MakeFileBehaveLikeUnchangedForGit.bat" "$(ProjectDir)Web.config.developer" "$(SolutionDir)"
call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config
但是,如果关键更改发生了变化,我可以看到此方法存在问题。

@Grant是正确的

我所在的团队有近100名其他开发人员,我们的配置文件没有签入源代码管理。存储库中的文件版本在每次签出时都会被提取出来,但不会更改

这对我们来说很好。

@Grant是对的

我所在的团队有近100名其他开发人员,我们的配置文件没有签入源代码管理。存储库中的文件版本在每次签出时都会被提取出来,但不会更改


这对我们来说效果很好。

我过去做的就是拥有一个默认的配置文件,该文件被签入到源代码管理中。然后,每个开发人员都有自己的覆盖配置文件,该文件被排除在源代码管理之外。应用程序首先加载默认值,然后如果存在覆盖文件,则加载该文件并使用覆盖中的任何设置(优先于默认文件)


一般来说,覆盖文件越小越好,但是对于具有非常非标准环境的开发人员来说,它总是可以包含更多的设置。

我过去所做的是拥有一个默认的配置文件,该文件被签入到源代码管理中。然后,每个开发人员都有自己的覆盖配置文件,该文件被排除在源代码管理之外。应用程序首先加载默认值,然后如果存在覆盖文件,则加载该文件并使用覆盖中的任何设置(优先于默认文件)


一般来说,覆盖文件越小越好,但对于具有非常非标准环境的开发人员来说,它总是可以包含更多的设置。

I版本控制它,但决不将它推送到其他服务器。如果生产服务器需要更改,我将直接对配置文件进行更改


它可能不漂亮,但工作正常。

我对其进行版本控制,但从不将其推送到其他服务器。如果生产服务器需要更改,我将直接对配置文件进行更改


它可能不漂亮,但工作正常。

app/web.config的签入普通版本应该足够通用,可以在所有开发人员机器上工作,并且可以随时更新任何新的设置更改等。如果您需要一组特定的开发/测试/生产设置,请使用这些设置签入单独的文件,正如GateKiller所说的,虽然我通常使用“web.prod.config”作为命名约定,以避免更改文件扩展名。

app/web.config的签入普通版本应该足够通用,可以在所有开发人员机器上工作,并且可以随时更新任何新的设置更改,等等。如果您需要一组特定的dev/test/production设置,请使用这些设置检入单独的文件,如GateKiller所述,使用某种命名约定,尽管我通常使用“web.prod.config”,不要更改文件扩展名。

我们使用签入版本控制的模板配置文件,然后在自动生成中使用特定于环境的设置替换模板文件中的特定条目。特定于环境的设置存储在单独的XML文件中,该文件也受版本控制


我们在自动生成中使用MSBuild,因此我们使用来自的XmlUpdate任务来更新值。

我们使用签入到版本控制的模板配置文件,然后在自动生成中使用一个步骤来使用特定于环境的设置替换模板文件中的特定条目。特定于环境的设置存储在单独的XML文件中,该文件也受版本控制


我们在自动生成中使用MSBuild,因此我们使用中的XmlUpdate任务来更新值。

我的团队为每个环境(web.config.dev、web.config.test、web.config.prod)保留不同版本的配置文件。我们的部署脚本复制出正确的版本,并将其重命名为web.config。这样,我们就可以对每个环境的配置文件进行完整的版本控制,可以轻松地执行差异等操作。

我的团队为每个环境保留单独版本的配置文件(web.config.dev、web.config.test、web.config.prod)。我们的部署脚本复制出正确的版本,并将其重命名为web.config。这样,我们对每个环境的配置文件都有完整的版本控制,可以轻松地执行差异等。

很长一段时间以来,我一直在做bcwood所做的事情。我将web.dev.config、web.test.config、web.prod.config等的副本置于源代码管理下,然后我的构建/部署系统在部署到各种环境时自动重命名它们。文件之间会有一定的冗余(特别是所有asp.net文件都在其中),但通常情况下,它工作得非常好。您还必须确保团队中的每个人在进行更改时都记得更新所有文件

顺便说一下,我喜欢在结尾保留“.config”作为扩展名,这样文件关联就不会被破坏

至于配置文件的本地开发者版本,我总是尽力鼓励
call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config
root
|
|- config (not tracked)
|
|- configs/ (all tracked)
    |- development
    |- staging
    |- live
    |- James