I faced the same issue.
None of the above solutions worked for me. And I think it's a poor solution to maintain multiple .ignore files.
This is how I solved it.
**/packages/*
!**/packages/repositories.config
Combining two asterisks will match any string of folders. I thought leaving out asterisks would have the same effect, but apparently I (we) were wrong, as it doesn't seem to work.
The official .gitignore template for Visual Studio recommends the following solutions:
# 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
EDIT: You can use https://www.gitignore.io to generate .ignore file for your favorite project :-)