git кроме подкаталога и его файлов игнорируемого каталога

Я использую git для управления своими источниками, у меня есть несколько файлов в следующих путях:

Debug/a.dll
Debug/b.exe
Debug/c.png
Debug/Pic/a.png
Debug/Pic/b.bmp
Debug/Pic/c.dll

Я хочу игнорировать эти файлы:

Debug/a.dll
Debug/b.exe
Debug/c.png

Но чтобы исключить эти файлы из игнорирования:

Debug/Pic/a.png
Debug/Pic/b.bmp
Debug/Pic/a.dll

3 ответа

Решение

Git использовать .gitignore игнорировать или отслеживать файлы в игнорируемых путях.

В вашем случае вам нужно добавить это к вашему .gitignore файл в корневом каталоге вашего проекта. Создать файл, если он не существует

#List of files to ignore
Debug/*

#List of files to exclude from the ignored pattern above
!Debug/Pic
!Debug/Pic/*

Что входит в содержание этого образца .gitignore

Debug/* - Это будет игнорировать все файлы в папке отладки
!Debug/Pic/* - ! это специальный символ в этом случае, говорящий git исключить данный шаблон из игнорируемых путей.

Другими словами:
Мы "сказали" git игнорировать все файлы под Debug папку, но включить все файлы под Debug/Pic/ папка.

Как обычно, с исключением в gitignore правило помнить:

Невозможно повторно включить файл, если исключен родительский каталог этого файла ( * )
(*: если в git 2.? не соблюдены определенные условия, см. ниже)

поскольку Debug/* будет игнорировать папку Debug/Pic/, попытка исключить содержимое этой папки не будет работать (!Debug/Pic/*) с мерзавцем 2.6 или меньше.

Вы должны сначала исключить папку. Тогда его содержание.

Debug/*
!Debug/Pic/
!Debug/Pic/*

Обратите внимание, что в git 2.9.x/2.10 (середина 2016 года?) Может оказаться возможным повторно включить файл, если родительский каталог этого файла будет исключен, если в пути не будет подстановочного знака.

Nguy Thn Thái Ngọc Duy ( pclouds ) пытается добавить эту функцию:

Так в git 2.9+, чтобы заново включить папку Debug/Pic/, ты можешь сделать:

/Debug
!Debug/Pic

Вы можете сначала добавить подкаталог, а затем игнорировать содержащий каталог:

git add Debug/Pic
git ignore Debug

Это будет иметь побочный эффект - не показывать добавление новых файлов в Debug/Pic, но вы можете просто добавить их вручную с помощью 'git add -f', чтобы обойти предупреждение.gitignore.

Другие вопросы по тегам