Subversion和Visual Studio项目的最佳实践

我最近开始在Visual Studio中开发各种C#项目,作为一个大规模系统的计划的一部分,这个系统将被用来取代我们当前的系统,这个系统是用C和Perl编写的各种程序和脚本的组合。 我现在正在进行的项目已经达到了致力于颠覆的临界水平。 我想知道什么应该和不应该提交到Visual Studio项目的存储库。 我知道这将产生各种文件,只是构build工件,并不需要承诺,我想知道是否有人有任何正确使用SVN与Visual Studio的build议。 目前,我正在使用Visual Studio 2010testing版的SVN 1.6服务器。 任何意见,意见,欢迎。

根据MSDN :

您可以将以下文件添加到Visual Studio源代码pipe理:

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

无法添加到源代码pipe理的文件包括以下内容:

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

我会build议使用AnkhSVN – Visual Studio 2008/2010的Subversion源代码控制插件。

您可以使用它来执行解决scheme,项目和源代码的初始添加和提交,并且不会添加任何构build工件。 它不会添加由您的构build生成的任何内容,只包含您的解决scheme引用的文件。 如果还有任何其他的东西不在你的解决scheme中,你可以在之后添加它们。

将以下文件放在版本控制中:

  • .dsw(VS6工作区)
  • .dsp(VS6项目)
  • .sln(VS解决scheme)
  • 。* proj(VS各种types的项目文件)
  • 当然你的源文件和你创build的其他工件

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

  • .ncb(与浏览或intellsense有关)
  • .suo(用户工作区设置,如窗口位置等 – 我认为)
  • .user(用户项目设置,如断点等 – 我认为)

另外,不要放入任何目标文件,可执行文件,自动生成的文件(如可能生成的头文件)。

至于可执行文件和其他生成的文件 – 如果你想能够存档版本,可能会有一个例外。 这可能是一个好主意,但是您可能希望将其稍微改变一点,可能与源代码不同。 如果你这样做,还要存档你的.pdb文件,以便以后debugging。 您可能需要使用Symbol Server来存储已归档的符号(请参阅适用于符号服务器的Windowsdebugging工具及其文档)。

这是我从SVN中排除的特定于VS的文件列表:

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

解决scheme级别

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

项目级别:

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

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

忽略项可以被文件名(即MyProject.csproj )或通配符模式(即*.csproj.user )显式忽略。


一旦你有了你的忽略设置,检查一个干净的源文件,然后build立应该显示没有修改(即没有新的未版本控制的文件)。

我会手动包括我认为我不应该版本控制的所有文件。

我的全局忽略模式是:

.dll .pdb .exe .cache .webinfo .snk bin obj debug _Resharper .user resharper

如果您使用忽略列表,SVN区分大小写。 所以记得分开忽略bin和Bin文件夹。

此外,我有一个问题..为什么刷新状态图标需要很多时间? 有时它变得非常混乱。

请参阅Mercurial .hgignore for Visual Studio 2008项目的Mercurial忽略列表。 我不熟悉SVN忽略列表的语法,但是这个线程有几个很好的在Visual Studio中忽略什么的列表。