Visual Studio 项目的 .gitignore 应该怎么写
Visual Studio 项目的 .gitignore 核心项:[Bb]in/、[Oo]bj/、.vs/、.user、.suo、Debug/Release 构建输出、旧式 packages 内容(按需保留 build 目标)、.pdb、TestResults/。推荐直接使用 GitHub 官方 VisualStudio 模板。
直接用 GitHub 官方的 VisualStudio 模板(新建仓库时选 .gitignore: VisualStudio,或从 github/gitignore 仓库复制)。核心排除三类:构建输出(bin/obj/Debug/Release)、用户私有配置(.vs/、.user、.suo)、临时与缓存文件。
核心条目速览
# 构建输出
[Bb]in/
[Oo]bj/
[Oo]ut/
[Dd]ebug/
[Rr]elease/
x64/
x86/
# Visual Studio 用户私有
.vs/
*.user
*.suo
*.userosscache
*.sln.docstates
# 调试/诊断
*.pdb
*.psess
*.vsp
TestResults/
# NuGet(旧 packages 目录,需保留某些包的 build 目标时不要排除整个父目录)
**/[Pp]ackages/*
!**/[Pp]ackages/build/
*.nupkg
# Rider / ReSharper:按团队约定选择用户私有文件,不直接屏蔽所有共享设置
.idea/**/workspace.xml
*.DotSettings.user
几个要点
.vs/必须忽略:它是 VS 2015+ 的本机缓存目录,体积大且纯属本机状态;- 大小写模式
[Bb]in/:应核对文件系统与 core.ignoreCase 等配置对大小写的影响;该显式模式,这样写同时覆盖 bin 和 Bin; - NuGet:老式 packages.config 项目忽略 packages/;PackageReference 通常还原到全局缓存,仍需检查自定义还原路径;完整模板还可能保留包内 build 目标;
- 不要提交
.suo、*.user:里面是你的窗口布局、本机调试设置,提交会不断产生无意义 diff。
上述模式需按项目检查,不能把所有 *.pdb、packages/ 或目录名视为必然可再生成;项目定义及需要版本化的预编译资产应保留。
获取完整模板
完整模板几百行,覆盖各种边缘情况(Blend、Resharper、SQL Server 项目等),不要手写,直接拿官方模板按需裁剪。
常见问题(FAQ)
Q:已误提交 bin/obj 怎么办?
git rm -r --cached bin obj 移出索引,确认 .gitignore 已配置,提交。历史中的体积需要 filter-repo 才能清除。
Q:.sln 解决方案文件要提交吗?
要。.sln 和 .csproj 是项目结构定义,必须进版本库。忽略的只是用户私有部分(.suo、.user)。
Q:团队混用 VS 和 VS Code/Rider?
不能假定模板无条件忽略整个 .vscode/、.idea/;团队可共享任务、调试和代码风格配置,只忽略用户私有状态;代码风格统一交给 .editorconfig(这个要提交)。