Visual studio 如何使用SVN和VS2010解决依赖于机器的配置问题?

Visual studio 如何使用SVN和VS2010解决依赖于机器的配置问题?,visual-studio,svn,configuration,Visual Studio,Svn,Configuration,首先,我是一个开发ASP.NET应用程序的小团队的成员。除了我们之外,还有另外两个团队在进行这项工作,都来自不同的国家。源代码托管在共享的SVN服务器上,但没有中央测试环境。每个开发人员都在自己的机器上运行应用程序,并为每个团队设置数据服务 不幸的是,我们的SVN工作流中存在一些漏洞:当有时间进行SVN更新时,麻烦就会出现 这主要是因为每个开发人员和团队在磁盘目录结构和配置(IIS和应用程序本身)方面的环境略有不同。因此,配置文件和其他地方的冲突本质上根本不是冲突——对于运行时配置(XML)和*

首先,我是一个开发ASP.NET应用程序的小团队的成员。除了我们之外,还有另外两个团队在进行这项工作,都来自不同的国家。源代码托管在共享的SVN服务器上,但没有中央测试环境。每个开发人员都在自己的机器上运行应用程序,并为每个团队设置数据服务

不幸的是,我们的SVN工作流中存在一些漏洞:当有时间进行SVN更新时,麻烦就会出现

这主要是因为每个开发人员和团队在磁盘目录结构和配置(IIS和应用程序本身)方面的环境略有不同。因此,配置文件和其他地方的冲突本质上根本不是冲突——对于运行时配置(XML)和*.suo

如果我们的目标是尽可能轻松地进行结账、应用程序设置和更新,我们应该如何处理这个问题?


一种选择显然是母版。另一个是在开发人员环境中建立一致性并保持一致性。但是第三种选择呢?

一件事是不要将
.suo
文件放入SVN,没有理由这样做。

一件事是不要将
.suo
文件放入SVN,没有理由这样做。

这不是一个完美的解决方案(只有在没有太多特殊文件的情况下才应该使用),但我要做的是为每个案例添加假文件,并在本地将真实文件切换到它。 详细说明:我有一个文件foo,它产生了问题。我还创建了foo_1和foo_2,然后在本地将foo切换到foo_1(我使用的是tortoisesvn,所以我不能真正给您命令行来实现这一点)。然后,我在我的机器上处理foo,但实际上要提交foo_1。其他各方可以转而使用foo_2


(我承认这基本上是您自己建议的主文件方法的一种变体;但如果这些文件没有太多实际更改,这至少减少了您必须考虑的冲突数量)

这不是一个完美的解决方案(只有在没有太多特殊文件的情况下才应该使用),但我要做的是为每个案例添加假文件,并在本地将真实文件切换到它。 详细说明:我有一个文件foo,它产生了问题。我还创建了foo_1和foo_2,然后在本地将foo切换到foo_1(我使用的是tortoisesvn,所以我不能真正给您命令行来实现这一点)。然后,我在我的机器上处理foo,但实际上要提交foo_1。其他各方可以转而使用foo_2


(我承认这基本上是您自己建议的主文件方法的变体;但如果这些文件没有太多实际更改,这至少减少了您必须考虑的冲突数量)

对于IIS配置,不应该有任何争议-整个构建团队的统一环境

对于app.config等文件,我倾向于将它们保存在项目根目录中单独的“cfg”目录中,并使用预构建事件复制到我需要的相关文件中,具体取决于我正在处理的项目和环境

您可以在特定于用户的配置中将单独的构建任务复制到输出目录中。在根项目中添加一个名为“user.config或其他内容,并将其保留为空。然后配置项目生成以检查条目,并将它们复制到输出目录。这很容易做到,然后每个开发人员都可以拥有自己的配置,而不会影响主副本。只需确保该文件夹上有一个忽略模式,这样就不会提交特定于用户的配置。如果您拥有对源代码repo的svnadmin访问权,您可以设置一个钩子来防止它发生

还为.suo、.user、\u Resharper或您认为相关的任何其他扩展在根目录上设置忽略模式(递归)。关于这个话题,已经有一些问题了:


对于IIS配置,在整个构建团队中应该没有参数-统一环境

对于app.config等文件,我倾向于将它们保存在项目根目录中单独的“cfg”目录中,并使用预构建事件复制到我需要的相关文件中,具体取决于我正在处理的项目和环境

您可以在特定于用户的配置中将单独的构建任务复制到输出目录中。在根项目中添加一个名为“user.config或其他内容,并将其保留为空。然后配置项目生成以检查条目,并将它们复制到输出目录。这很容易做到,然后每个开发人员都可以拥有自己的配置,而不会影响主副本。只需确保该文件夹上有一个忽略模式,这样就不会提交特定于用户的配置。如果您拥有对源代码repo的svnadmin访问权,您可以设置一个钩子来防止它发生

还为.suo、.user、\u Resharper或您认为相关的任何其他扩展在根目录上设置忽略模式(递归)。关于这个话题,已经有一些问题了:


忽略svn中的*.suo和*.user文件。这很容易。然后在subversion中创建两种类型的配置文件。开发和服务器,如果正在使用,也添加测试。参见下面的示例

ConnectionStringDevelopment.config
ConnectionStringServer.config

AppSettingsDevelopment.config
AppSettingsServer.config
服务器文件将包含服务器信息。开发文件不包含在svn中,在那里被忽略。每个新开发人员都将从复制服务器文件开始,并根据自己的环境进行更改

请看下面的示例站点

以下几行是有趣的

<appSettings configSource="appSettingsDevelopment.config"/>
<connectionStrings configSource="ConnectionStringsDevelopment.config" />

几乎可以在web.config中的任何地方使用,因此您可以为每个开发人员更改每个配置。仅使用以下命名约定。在subversion中忽略*Development.config。这样就不会向subversion添加任何开发人员配置。

忽略svn中的*.suo和*.user文件。这很容易。然后创建两种类型的con