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

Ответ 1

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
!Debug/Pic/* - ! - специальный символ в этом случае, говоря git исключить данный шаблон из игнорируемых путей.

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

Ответ 2

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

git add Debug/Pic
git ignore Debug

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

Ответ 3

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

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

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

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

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

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

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

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

/Debug
!Debug/Pic