0

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

不幸的是,我们的 SVN 工作流程存在一些缺陷:当有时间进行 SVN 更新时,就会出现烦恼。

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

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

一种选择显然是主副本。另一个在开发人员环境中建立统一性并保持它。但是第三种选择呢?

4

4 回答 4

2

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

于 2012-04-13T07:58:44.140 回答
1

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

对于app.config文件等,我倾向于将它们保存在项目的根目录中,并在需要的情况下使用预构建事件复制,这取决于我需要的项目和环境努力。

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

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

最好的通用 SVN 忽略模式?

于 2012-04-18T12:09:09.083 回答
1

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

ConnectionStringDevelopment.config
ConnectionStringServer.config

AppSettingsDevelopment.config
AppSettingsServer.config

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

查看以下示例站点 http://code.google.com/p/karkas/source/browse/trunk/Karkas.Ornek/WebSite/web.config

以下几行是兴趣。

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

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

于 2012-04-22T19:23:21.957 回答
0

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

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

于 2012-04-13T10:15:28.193 回答