题 .gitignore for Visual Studio项目和解决方案


我应该包含哪些文件 .gitignore 将Git与Visual Studio Solutions结合使用时(.sln)和项目?


1032


起源


相关问题: stackoverflow.com/questions/72298/... - Greg Hewgill
我把它变成了一个社区维基,并将所有现有答案合并到帖子中。请您认为合适! - Martin Suchanek
我会小心忽略.exe和.pdb,你可能会无意中忽略你用你的源存储的工具(nant,nunit gui等等)。 - James Gregory
@murki - 看起来这就是答案: coderjournal.com/2011/12/... - Ronnie Overby
同 .sln 签入文件,我们得到噪音差异,如 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0  这可以避免吗? - Jean Jordaan


答案:


查看官方GitHub “收藏有用 的.gitignore 模板”

.gitignore 对于Visual Studio可以在这里找到:
https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


520



请注意。此文件包含忽略已发布文件的条目。无论编写规则的方式如何,它都会忽略任何名为“发布”的文件夹,并且在此之前会忽略您所拥有的任何内容。它没有专门针对Visual Studio“发布”输出。它会忽略它,但也会忽略它。 - Rex Whitten
@starfighterxyz如果您认为gitignore中存在错误,我建议您创建一个拉取请求。 - Chronial
好吧,我不知道(足够?)说出它的错误。我恰好使用Publish /作为Controller名称,以及作为项目文件夹名称。我认为这只是一个边缘案例。只需要节省几个小时的生活:) - Rex Whitten
知道为什么像Thumbs.db和Desktop.ini这样的Windows特定文件没有列在上述链接的文件中吗? - Learner
@Learner因为它们在不同的文件中。您应该将这些添加到您的个人全球gitignore,而不是检查它们。 github.com/github/gitignore/tree/master/Global - Chronial


有一个在线工具,允许您根据您的操作系统,IDE,语言等生成.gitignore文件。看一看 http://www.gitignore.io/

enter image description here

2014年8月20日,这是为Visual Studio + Windows生成的文件。

# Created by http://www.gitignore.io

### VisualStudio ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/

# Roslyn cache directories
*.ide/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

#NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding addin-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings 
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# If using the old MSBuild-Integrated Package Restore, uncomment this:
#!**/packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/


### Windows ###
# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msm
*.msp

213





我在C#项目中使用以下.gitignore。在需要时添加其他模式。

[Oo]bj
[Bb]in
*.user
*.suo
*.[Cc]ache
*.bak
*.ncb
*.log 
*.DS_Store
[Tt]humbs.db 
_ReSharper.*
*.resharper
Ankh.NoLoad

106



不同意 *.resharper。文件匹配 *.ReSharper.user 应该被忽略,但这是由...提供的 *.user 以上规则。 - Drew Noakes
@DrewNoakes:你认为应该修改哪些ReSharper文件? - Per Lundberg
@PerLundberg值得考虑的一个原因是您可以配置标准项目格式选项等,并使用项目保存配置文件。如果这是在git中,那么使用Resharper的每个人都可以更轻松地保持项目的格式一致。 - Marc
@DrewNoakes - 任何建议 这个 请? - student


对那些对什么感兴趣的人 微软 认为应该包含在gitignore中,这是默认的 Visual Studio 2013 RTM 在创建新的Git-Repository时自动生成:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results

[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/

# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
!packages/*/build/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
*.ncrunch*
.*crunch*.local.xml

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.Publish.xml

# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/

# Windows Azure Build Output
csx
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf


#LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml

# =========================
# Windows detritus
# =========================

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac desktop service store files
.DS_Store

看到: 在MSDN上添加默认的.gitignore文件


45





虽然您应该保留NuGet packages.config文件,但应该排除packages文件夹:

#NuGet
packages/

我通常不会在源代码管理中存储二进制文件或从我的源代码生成的任何内容。然而,对此有不同的意见。如果它使您的构建系统更容易,那就去做吧!但是,我认为你没有对这些依赖项进行版本控制,因此它们只占用存储库中的空间。在我看来,将二进制文件存储在一个中心位置,然后依赖packages.config文件来指示需要哪个版本是一个更好的解决方案。


37



有人想详细说明你为什么要排除包文件夹?包含构建服务器的包以使其具有依赖性是否有意义? - Joel Martinez
值得注意的是,NuGet团队正是为这个问题实现了“包恢复”功能。有一个 文件 在NuGet网站上解释了该功能,并介绍了如何在Visual Studio中使用它。 - ajk
如果您忽略包并使用nuget包还原,则允许nuget.exe很有帮助。当有人下载​​时,这告诉帮助VS告诉该解决方案已启用该功能: !NuGet.exe < - 不要忽略此文件。 - danludwig
对于那些使用AppHarbor的人来说,值得注意的是,排除packages文件夹将导致您的构建失败部署:) - Joel Martinez


我更喜欢根据需要排除事物。你不想用猎枪在名字中用字符串“bin”或“obj”排除所有内容。 至少 一定要跟随斜线。

这是我在VS2010项目中开始的内容:

bin/
obj/
*.suo
*.user

只是因为我使用ReSharper,这也是:

_ReSharper*

16



同意。此外,这适用于“调试”。添加尾部斜杠以避免忽略名称中带有debug的文件。 - John Korsnes


在Visual Studio 2015 Update 3上,随着今天(2016-10-24)更新了Git扩展, 的.gitignore Visual Studio生成的是:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
[Xx]64/
[Xx]86/
[Bb]uild/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml

# TODO: Un-comment the next line if you do not want to checkin 
# your web deploy settings because they may include unencrypted
# passwords
#*.pubxml
*.publishproj

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Microsoft Azure ApplicationInsights config file
ApplicationInsights.config

# Windows Store app package directory
AppPackages/
BundleArtifacts/

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# LightSwitch generated files
GeneratedArtifacts/
ModelManifest.xml

# Paket dependency manager
.paket/paket.exe

# FAKE - F# Make
.fake/

10



我很喜欢这个部分: Backup & report files from converting an old project file to a newer Visual Studio version. Backup files are not needed, because we have git ;-) - Jeancarlo Fontalvo


为构建部署添加了InstallShield忽略。 InstallShield是Microsoft领导Visual Studio Installer的新方向,因此我们已开始在所有新项目中使用它。此添加的行将删除SingleImage安装文件。其他InstallShield类型可能包括DVD分发等。您可能希望添加这些目录名称或仅添加[Ee] xpress /以防止任何InstallShield LE部署文件进入仓库。

以下是使用Install Shield LE和安装程序的SingleImage部署的VS2010 C#项目的.gitignore:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#InstallShield
[Ss]ingle[Ii]mage/
[Dd][Vv][Dd]-5/
[Ii]nterm/

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

9



我在这里引用詹姆斯格雷戈里的评论:“我会小心忽略.exe和.pdb的,你可能会无意中忽略你用你的来源存储的工具(nant,nunit gui等等)。 - James Gregory 2010年5月21日13:32" - Jim Raden
不同意 *.resharper。文件匹配 *.ReSharper.user 应该被忽略,但这是由...提供的 *.user 以上规则。 - Drew Noakes
只是一个澄清 - 它实际上是回到InstallShield,它存在于VisualStudio安装程序之前,至少可以追溯到1998年! - Mathieson


这是一个摘录 .gitignore 在我最近的一个项目上。我已经提取了我认为与Visual Studio相关的那些,包括编译输出;它是一个跨平台项目,因此其他构建系统生成的文件还有其他各种忽略规则,我无法保证将它们完全分开。

*.dll
*.exe
*.exp
*.ilk
*.lib
*.ncb
*.log
*.pdb
*.vcproj.*.user
[Dd]ebug
[Rr]elease

也许这个问题应该是社区Wiki,所以我们可以一起编辑一个主列表,其中包含关于哪些类型的项目应该忽略哪些文件的注释?


6



请参阅詹姆斯格雷戈里对另一个答案的评论:“我会小心忽略.exe和.pdb,你可能会无意中忽略你用你的来源存储的工具(nant,nunit gui等等)。 - James Gregory 2010年5月21日在13:32“ - Jim Raden
@JimRaden一般来说,最好避免将二进制工具检入Git。最佳做法是仅向Git检查您的来源;如果您需要二进制工具,请包含用于安装它们的脚本或仅包含这些工具的子模块。 - Brian Campbell


归功于 Jens Lehmann为这一个  - 如果将源目录与编译器项目文件和构建输出分开,则可以通过否定它来简化.gitignore:

path/to/build/directory/*
!*.sln
!*.vcproj

您没有说明您使用的语言,但上述内容适用于C ++项目。


6



我不知道.gitignore中有一个否定旗帜。有用的提示! - Jim Raden


晚到这里聚会,但我也发现我使用以下内容。有些可能仅对于在推送到隐藏敏感文件时有用 上市 远程。

#Ignore email files delivered to specified pickup directory
*.eml

#Allow NuGet.exe (do not ignore)
!NuGet.exe

#Ignore WebDeploy publish profiles
*.Publish.xml

#Ignore Azure build csdef & Pubxml files
ServiceDefinition.build.csdef
*.azurePubxml

#Allow ReSharper .DotSettings (for non-namespace-provider properties)
!*.csproj.DotSettings

#Ignore private folder
/Private/

6



最新版本不需要显式unignore nuget.exe - tofutim
@tofutim,最新版本是什么? git本身? - danludwig
上面的社区维基 - tofutim