.gitignore Папка пакетов NuGet на любом уровне, но включает файл .targets на любом уровне
Я пытаюсь реализовать обходной путь для Проблемы восстановления пакета NuGet.
Это включает в себя игнорирование содержимого всех папок пакетов на любом уровне иерархии. Однако файлы .targets(обычно в подпапках папок пакетов) не должны игнорироваться.
Например:
.gitignore
YourProject/
YourProject.csproj
packages/
repositories.config
Microsoft.Bcl.Build.1.0.7/
lib/
foo.dll
tools/
Microsoft.Bcl.Build.targets
Должны включать только файлы:
- .gitignore
- YourProject.csproj
- Microsoft.Bcl.Build.targets
Windows, git версия 1.8.1.msysgit.1.
Я прочитал несколько ответов на StackOverflow, проверил справочную страницу и пробовал множество вариантов без успеха.
Это не работает:
packages/*
!*.targets
И это:
packages/*
!packages/**/*.targets
И это:
**/packages/*
!**/packages/**/*.targets
Update:
- Это должно работать независимо от того, где находится папка пакетов в иерархии.
- Необходимо игнорировать файлы под пакетами, подпапками, подпапками и т.д.
- Другие строки .gitignore, такие как
bin/
, должны продолжать работать.
Ответы
Ответ 1
Нет никакого "хорошего" способа сделать это (см. manpage как доказательство), однако есть обход вокруг него.
Основная проблема с игнорированием packages/
биты заключается в том, что git даже не проверяет подкаталоги из-за игнорирования директории.
Решение здесь - вам нужно будет иметь 2 файла gitignore. Один регулярный и один внутри каталога пакетов, который выглядит следующим образом:
# ignore all files
*
# do not ignore directories
!*/
# do not ignore targets
!*.targets
# do not ignore gitignore
!*.gitignore
Новый пример:
$ mkdir foo
$ cd foo/
$ mkdir foo
$ mkdir foo/bar
$ mkdir foo/bar/baz
$ touch foo/.foo
$ touch foo/bar/.foo
$ touch foo/bar/baz/.foo
$ touch regular.txt
$ touch foo/ignored.txt
$ touch foo/bar/baz/ignored-2.txt
$ cat foo/.gitignore
*
!*/
!*.foo
!regular.txt
!.gitignore
$ git add . && git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: foo/.foo
# new file: foo/bar/.foo
# new file: foo/bar/baz/.foo
# new file: regular.txt
#
Ответ 2
Приоритет игнорируемых путей важен, я беру его.
Я исправил эту проблему, указав сначала, что следует оставить, чтобы игнорировать остальную часть содержимого пакетов.
В файле .gitignore
убедитесь, что у вас должно быть:
!packages/repositories.config
packages/
См. https://github.com/danyandresh/Research/commit/65291219a1c1fbcdb2216c686767e8c46451baa1
Обратите внимание: мой файл .gitignore
является простой копией Список игнорирования Visual Studio, найденный в github