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中忽略什么的列表。