本文档提供了 Visual Studio 和 .NET 开发环境的 gitignore 模式的详细解释。它涵盖了在使用 Visual Studio 项目、.NET Framework、.NET Core 以及相关工具和插件时应从版本控制中排除的模式。有关 JetBrains IDE(包括用于 .NET 开发的 Rider)的信息,请参阅 JetBrains IDE。
Visual Studio gitignore 模板是 GitHub gitignore 仓库中最全面的模板之一,反映了 Visual Studio 生态系统的复杂性以及开发过程中生成的文件种类繁多。
来源:VisualStudio.gitignore1-400
用户特定文件包含不应在开发者之间共享的个人设置和偏好。
| 文件模式 | 描述 |
|---|---|
*.rsuser | 远程会话的用户特定文件 |
*.suo | 解决方案用户选项(二进制文件) |
*.user | 用户特定的项目设置 |
*.userosscache | 用户特定的选项缓存 |
*.sln.docstates | 解决方案的文档状态 |
*.userprefs | MonoDevelop/Xamarin Studio 用户偏好设置 |
这些文件存储个人 IDE 设置、调试配置和其他用户特定选项,不应在开发者之间共享,因为它们会导致冲突并可能覆盖他人的偏好。
构建输出是可由项目构建重新生成的文件,不应纳入版本控制。
该模板排除所有构建输出目录,例如 [Dd]ebug/、[Rr]elease/、[Bb]in/ 和 [Oo]bj/,以及特定平台的构建文件夹,例如 x64/、x86/、[Aa][Rr][Mm]/ 和 [Aa][Rr][Mm]64/。
它还忽略编译期间生成的各种中间文件,例如 *.obj、*.pdb(程序数据库文件)、*.ilk(增量链接文件)等。这些文件是二进制文件或大文本文件,每次构建都会更改,并且可以从源代码重新生成。
来源:VisualStudio.gitignore19-33 VisualStudio.gitignore72-101
Visual Studio 会创建各种缓存和选项文件,这些文件应被排除。
| 缓存类型 | 文件或目录模式 | 目的 |
|---|---|---|
| VS 缓存目录 | .vs/ | VS 2015/2017/更新版本的缓存目录 |
| 生成的代码 | Generated\ Files/ | VS 2017 自动生成的文件 |
| Intellisense 缓存 | ipch/ | IntelliSense 预编译头文件 |
| VC 数据库 | *.VC.db, *.VC.VC.opendb | Visual C++ 数据库文件 |
| VS 跟踪文件 | *.e2e | Visual Studio 跟踪文件 |
| 本地历史记录 | .localhistory/, .vshistory/ | VS 历史记录文件 |
`.vs/` 目录包含缓存文件、本地选项和 IntelliSense 数据。由于这些文件会根据需要由 Visual Studio 重新生成,因此不应提交到仓库。
来源:VisualStudio.gitignore35-41 VisualStudio.gitignore107-115 VisualStudio.gitignore365-368
NuGet 是 .NET 的包管理器。gitignore 模板排除包文件和目录,同时允许灵活的包还原。
该模板排除 NuGet 包文件(*.nupkg、*.snupkg)、packages 目录(**/[Pp]ackages/*)和 NuGet 配置文件(*.nuget.props、*.nuget.targets)。它对与构建相关的包文件(!**/[Pp]ackages/build/)做了例外处理,这些文件可能是 MSBuild 目标所必需的。
来源:VisualStudio.gitignore197-209 VisualStudio.gitignore60-63
测试框架会生成结果和覆盖率数据,这些数据不应提交。
| 测试框架 | 忽略的模式 | 描述 |
|---|---|---|
| MSTest | [Tt]est[Rr]esult*/, [Bb]uild[Ll]og.* | 测试结果和构建日志 |
| NUnit | *.VisualState.xml, TestResult.xml, nunit-*.xml | NUnit 测试结果 |
| 代码覆盖率 | *.coverage, *.coveragexml, coverage*.json, coverage*.xml | 覆盖率数据文件 |
| BenchmarkDotNet | BenchmarkDotNet.Artifacts/ | 基准测试结果 |
所有这些文件都包含临时测试结果,可以通过重新运行测试来重新生成。提交它们会导致不必要的冲突和仓库膨胀。
来源:VisualStudio.gitignore43-50 VisualStudio.gitignore147-154 VisualStudio.gitignore57-58
许多 Visual Studio 扩展会生成自己的文件,这些文件应被排除。
该模板排除由流行扩展生成的文件,例如
_ReSharper*/, *.[Rr]e[Ss]harper, *.DotSettings.user.axoCover/*, *.dotCover, OpenCover/_NCrunch_*, *.ncrunch*.local.xml*.GhostDoc.xml_TeamCity*, .fake/这些文件包含用户特定设置、临时数据或可重新生成的数据,因此不应包含在版本控制中。
来源:VisualStudio.gitignore132-153 VisualStudio.gitignore325-326 VisualStudio.gitignore68-69
该模板解决了各种 .NET 项目类型的特殊要求。
| 项目类型 | 忽略的模式 | 描述 |
|---|---|---|
| .NET Core/5+ | project.lock.json, project.fragment.lock.json, artifacts/ | .NET Core 包锁定文件 |
| ASP.NET | ScaffoldingReadMe.txt | ASP.NET 骨架生成自述文件 |
| Windows 应用商店 | AppPackages/, BundleArtifacts/, Package.StoreAssociation.xml | 商店应用打包文件 |
| Silverlight/RIA | Generated_Code/ | Silverlight 的生成代码 |
| Azure | csx/, *.build.csdef, ecf/, rcf/ | Azure 特定文件 |
所有这些项目类型都会生成其自身独特的,通常应从版本控制中排除的文件。
来源:VisualStudio.gitignore60-66 VisualStudio.gitignore219-226 VisualStudio.gitignore211-218 VisualStudio.gitignore253-254
包含数据库组件的 Visual Studio 项目会生成多个数据库文件。
| 文件模式 | 描述 |
|---|---|
*.mdf | SQL Server 数据库主数据文件 |
*.ldf | SQL Server 数据库日志文件 |
*.ndf | SQL Server 次数据文件 |
*.jfm | SQL Server 日志文件 |
*.dbmdl | 数据库模型文件 |
*.dbproj.schemaview | 数据库架构视图文件 |
这些文件包含数据库数据或架构信息,通常不应提交到源代码管理。应通过 SQL 脚本或迁移来跟踪数据库更改。
来源:VisualStudio.gitignore266-269 VisualStudio.gitignore238-240
gitignore 模板考虑了不同 Visual Studio 版本。
模板包含以下模式
*.plg、*.opt、*.vbw 等.vs/ 缓存目录Generated\ Files/、MigrationBackup/.vscode/*(但会排除常见的共享配置文件)这确保了模板可以适用于从旧版 VS6 到现代 VS Code 的多个 Visual Studio 版本。
来源:VisualStudio.gitignore290-308 VisualStudio.gitignore35-36 VisualStudio.gitignore40-41 VisualStudio.gitignore373-374 VisualStudio.gitignore382-390
Visual Studio 项目通常与会生成自己文件的其他开发工具集成。
| 工具类别 | 忽略的模式 | 描述 |
|---|---|---|
| Node.js 工具 | .ntvs_analysis.dat、node_modules/ | VS 的 Node.js 工具 |
| Python 工具 | __pycache__/、*.pyc | VS 的 Python 工具 |
| Web 开发 | .sass-cache/ | Sass/SCSS 缓存文件 |
| 移动开发 | .mfractor/ | Xamarin 生产力工具 |
| Unity 集成 | 与 Unity 模板共享的各种模式 | VS 中的 Unity 项目文件 |
这些集成展示了 Visual Studio gitignore 模板如何适应开发者可能与 Visual Studio 一起使用的各种工具生态系统。
来源:VisualStudio.gitignore286-288 VisualStudio.gitignore329-330 VisualStudio.gitignore165-166 VisualStudio.gitignore361-362
该模板包含注释掉的行,有助于开发者根据自己的特定需求进行自定义。
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Including strong name files can present a security risk
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
#bower_components/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
这些注释掉的部分为具有不同需求的项目提供了灵活性,允许开发者根据需要取消注释特定行。
来源:VisualStudio.gitignore37-38 VisualStudio.gitignore245-247 VisualStudio.gitignore249-251 VisualStudio.gitignore205-206
使用 Visual Studio gitignore 模板时,请考虑以下最佳实践
*.pfx 证书)默认情况下会被排除artifacts/,因为它包含构建输出遵循这些实践将有助于确保您的存储库保持整洁,没有不必要的文件,同时包含所有必需的源代码和配置。
来源:VisualStudio.gitignore1-4 VisualStudio.gitignore37-38 VisualStudio.gitignore60-63 VisualStudio.gitignore242-243