If they are showing up in a git diff, then the files are already being tracked, whereas .gitignore only affects files that are untracked. You will need to remove the files from source control with git rm --cached, and then .gitignore will affect them.
Note that when you do this, other developers will have their files deleted locally when they do their next git pull. So before doing so, they may want to make a backup of those files.
I ran into this issue prior to committing anything to my repository. I erroneously thought that just having the .gitignore file in the directory would prevent VS from recognizing the files as 'Changes'. You have to first commit the .gitignore file before git will start ignoring the files specified within it.
In our case, the .vs directory had been added to source control when I initialized the repository. Thus, the line in .gitignore:
/.vs
didn't do anything until I deleted the directory and checked in the changes (similar to what TPoschel is saying above, but with the difference that checking in the deleted directory is what fixed it, as I had already checked in the .gitignore file).
I ran into this issue and I found an easy way of fixing the "git tracking the files already" thing.
Backup all the relevant files in your git folder on your PC to a seperate location (normally something like c:/user/source/repos if you didn't specify someplacec else).
Delete all the relevant files in the git folder.
Open Visual Studio and push this delete to the server.
Paste all the files back in.
Push this to the server.
This should be an easy way of getting rid of all those temporary files and anything else you specified on your .gitignore for your online git folder that it's already tracking.
Step 1: Add following content to the file .gitignore.
## 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/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# 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
# 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: 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/
# 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/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# 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/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# 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
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
Step 2: Make sure above operation take effect
If the issue still exists, that's because settings in .gitignore can only ignore files that were originally not tracked. If some files have already been included in the version control system, then modifying .gitignore is invalid.
To solve this issue completely, you need to open Git Bash running following commands in the repository root folder.
This answer is similar to ones above but, details actual steps when a valid .gitignore file is inplace, yet items have been checked into the branch and they appear in the origin repository.
If the .vs directory has been checked in verify nothing in the current branch has been staged from the directory. If so, un-stage them.
Go to the level of the directory which has .vs.
Run this command: git rm --cached -r .vs.
At this point you should see the files under the .vs directory as slated for deletion.
I have come across posts talking about having to delete or alter in some way the commit history in order to get the .gitignore file into the branch and more importantly having the contents honored by git to not include matches in what should be tracked.
When using Visual Studio 2022 all that is needed is to right-click the .vs folder in the Git-Changes menu and select the option Ignore these local items
After this the .gitignore is created and added to the next commit and whichever item you selected is now dropped from subsequent commits.
How to hide the ".vs" folder in Visual Studio from Git
Make sure your Git repo has a .git and .gitignore folder and file.
In the .gitignore file add the following lines with your Git project name to make sure your .vs folder is ignored:
.vs/
{yourgitprojectname}/.vs
Delete the ".vs" folder. Be sure to leave the ".git" folder intact. Realize when you do this you remove the Git-to-VisualStudio project connection, but your Git repo still exists.
In the lower right corner of Visual Studio look for your Git repo again and click it. It should rebuild your .vs folder again. But now ".vs" will be ignored.
Push your code to Azure, GitHub, etc. again. The ".vs" folder should not appear in your online repo and should be hidden. I use GitHub and it worked up there, so test your Azure.