Рекурсивно игнорировать все файлы в определенном каталоге, кроме файлов .json - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть файловая структура, подобная приведенной ниже:

foo/bar.foo
node_modules/foo/bar.json
node_modules/foo/bar/foo.bar

Что я хочу сделать, так это игнорировать все файлы в папке node_modules, кроме файлов json, так что я получаюсо следующей файловой структурой в моем репо:

foo/bar.foo
node_modules/foo/bar.json

Я пытался найти простой способ сделать это, но я еще не совсем там.

Вот что я придумал вмой .gitignore:

# ignore everything inside node_modules
node_modules/*

# But descend into directories
!node_modules/**/*.json

Какой самый элегантный способ достичь желаемого результата?

PS Понятия не имею, что я делаю.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Сначала вы должны , а не игнорировать (исключать) подпапки вашего игнорируемого каталога.

# ignore everything inside node_modules
node_modules/**

# exclude or whitelist subfolders: note the trailing /

!node_modules/**/

# But descend into directories
!node_modules/**/*.json

Используйте git check-ignore -v -- afile, чтобы проверить, какое правило все равно будет игнорировать ваш файл.
И убедитесь, что эти файлы не были добавлены в индекс (git rm --cached -r node_modules)

0 голосов
/ 22 сентября 2018

Хорошо, так что я наконец нашел решение.Вот что сделал трюк:

# Ignore all the files inside the node_modules folder
node_modules/**/*.*

# Allow only json files inside the node_modules folder
!node_modules/**/*.json

Проблема заключалась в том, что при выполнении node_modules/* он не только игнорировал файлы, но и папки.

И, как говорит git doc:

Невозможно повторно включить файл, если исключен родительский каталог этого файла.

Таким образом, вместо этого я сделал node_modules/**/*.*, который исключает только файлы, а не папки.

Таким образом, !node_modules/**/*.json фактически может внести в белый список json файлы.

0 голосов
/ 20 сентября 2018

В документации gitignore они заявляют:

Невозможно повторно включить файл, если исключен родительский каталог этого файла.

Это дает представление о том, почему ваше правило не выполняется.Вы можете вручную добавить отсутствующие файлы json с помощью волшебства xargs.Вам придется запускать это всякий раз, когда добавляются новые пакеты, но как только они будут отслежены, все будет работать.

 find node_modules/* -name *.json -print |xargs git add -f

Я протестировал с Git 2.18.0 и подтвердил, что файлы в вашем игнорируемом каталоге нормально работают после того, какдобавлено таким образом.Параметр -f выше необходим для более глубоких путей, которые были исключены вашими правилами .gitignore.

...