Subversion和Visual Studio项目的最佳实践

62

最近我开始在Visual Studio上进行各种C#项目的工作,这是我们计划中的一个大型系统的一部分,将用于替换我们当前使用的由各种以C和Perl编写的程序和脚本拼凑而成的系统。现在我正在处理的项目已经达到了提交到Subversion版本控制下的临界点。我想知道哪些文件应该提交到Visual Studio项目的存储库中,哪些不应该。我知道它会生成一些只是构建工件的文件,不需要真正进行提交,所以我想知道是否有人有关于如何正确使用Visual Studio的SVN的建议。目前,我正在使用SVN 1.6服务器和Visual Studio 2010 beta。欢迎任何建议和意见。


1
这是VS2010 C#。与此相比,例如VS2010 C++存在一些差异。请给它打上C#标签。 - Bitterblue
7个回答

91

根据MSDN的说法

您可以将以下文件添加到Visual Studio源代码控制中:

  • 解决方案文件(*.sln)。
  • 项目文件,例如*.csproj*.vbproj文件。
  • 基于XML的应用程序配置文件,用于控制Visual Studio项目的运行时行为。

不能添加到源代码控制的文件包括以下内容:

  • 解决方案用户选项文件(*.suo)。
  • 项目用户选项文件,例如*.csproj.user*.vbproj.user文件。
  • Web信息文件,例如*.csproj.webinfo*.vbproj.webinfo,用于控制Web项目的虚拟根位置。
  • 生成输出文件,例如*.dll*.exe文件。

2
这是一个不错的列表。基本上,您想要一组最小化的文件来编译项目。 - Soo Wei Tan
在某些情况下,可能需要提交.user文件。那些不需要添加的文件应该被添加到svn:ignore中。 - PJTraill
2
使用 Visual Studio 2015 的用户还需要从源代码控制中排除 .vs 文件夹。请参见 https://dev59.com/xlwZ5IYBdhLWcg3wYfZu。 - Theophilus

16
我建议使用AnkhSVN,这是一个适用于Visual Studio 2008/2010的Subversion源代码控制插件。
您可以使用它将解决方案、项目和源代码进行初始添加和提交到代码库中,并且它不会添加任何构建产物。它只会添加解决方案引用的文件,而不是生成的构建文件。如果您需要添加解决方案中没有涉及到的其他文件,您可以在之后再添加它们。

3
我尝试过AnkhSVN,发现它往往过早地将IDE内的操作解释为源代码控制中的操作,并鼓励开发人员进行单个文件的提交。我更喜欢Tortoise。 - PJTraill
但它知道忽略什么是很有用的! - PJTraill

15

将以下文件放入版本控制:

  • .dsw(VS6工作区)
  • .dsp(VS6项目)
  • .sln(VS解决方案)
  • .*proj(各种类型的VS项目文件)
  • 当然还有您创建的源文件和其他工件

不要将以下文件放入版本控制:

  • .ncb(与浏览或智能感知有关的内容)
  • .suo(用户工作区设置,如窗口位置等 - 我想是这样的)
  • .user(用户项目设置,如断点等 - 我想是这样的)

此外,请勿添加任何对象文件、可执行文件、自动生成的文件(例如可能生成的头文件)。

至于可执行文件和其他生成的文件 - 如果您希望能够归档发布版本,则可能会有例外情况。那可能是个好主意,但您可能需要以不同的方式管理它,并可能在不同的位置管理源代码。如果这样做,还要存档您的 .pdb 文件,以便稍后调试该文件。您可能希望使用符号服务器来存储已归档的符号(请参阅Windows 的调试工具以获取符号服务器及其文档)。

以下是我在 SVN 中排除的与 VS 相关的文件列表:

Ankh.Load
*.projdata
*.pdb
*.positions
*proj.user
*proj.*.user
*.ncb
*.suo
*.plg
*.opt
*.ilk
*.pch
*.idb
*.clw
*.aps

吹毛求疵:你说“不要放入...可执行文件”,但在下一段中你又说可能会需要! - PJTraill

11

解决方案级别:

  • 添加 .sln 解决方案文件
  • 忽略 .suo 解决方案用户选项文件

项目级别:

  • 添加 .csproj.vbproj(和 c++ proj?)文件
  • 忽略 .csproj.user.vbproj.user 文件
  • 忽略 bin 目录
  • 忽略 obj 目录
  • 忽略在运行时生成的任何文件/目录(例如日志)

如果使用 VS 插件,则可能会生成需要忽略的文件(例如 ReSharper 会生成 .resharper.resharper.user 文件)。

可以通过文件名显式忽略忽略项目,或通过通配符模式进行忽略(例如 *.csproj.user)。


设置忽略后,检出干净的源代码并构建应该不会显示修改(即没有新的未版本化的文件)。


5
我会手动将所有不应该进行版本控制的文件包括进去。
我的全局忽略模式是:
.dll .pdb .exe .cache .webinfo .snk bin obj debug _Resharper .user resharper

2

如果你正在使用忽略列表,SVN是区分大小写的。因此,请记住要分别忽略bin和Bin文件夹。

另外,我有一个问题...为什么有时刷新状态图标需要很长时间?有时会非常令人困惑。


1

请参考{{link1:Visual Studio 2008项目的Mercurial .hgignore}}获取Mercurial忽略列表。我不熟悉SVN忽略列表的语法,但是这个线程有一些好的列表可以在Visual Studio中忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接