В Git игнорировать вложенные папки

У меня много проектов в моем .Net-решении. Я хотел бы исключить все папки" bin/Debug "и" bin/Release "(и их содержимое), но по-прежнему включать саму папку" bin " и любые dll, содержащиеся в ней.

.gitignore с" bin/ "игнорирует папки" Debug "и" Release", а также любые dll, содержащиеся в папке" bin".

" bin / Debug "или" bin/Release " в .файл gitignore не исключает каталогов, если я полностью не квалифицирую шаблон ignore как "Решение / проект/bin / Debug" - что я не хочу делать, так как мне нужно будет включить этот полный шаблон для каждого проекта в мое решение, а также добавить его для любых новых добавленных проектов.

какие предложения?

9 ответов


вы пробовали маски?

Solution/*/bin/Debug
Solution/*/bin/Release

С версией 1.8.2 git вы также можете использовать ** подстановочный знак для любого уровня подкаталогов:

**/bin/Debug/
**/bin/Release/

вы можете использовать .gitignore на верхнем уровне, чтобы игнорировать все каталоги в проекте с тем же именем. Например:

Debug/
Release/

Это должно немедленно обновиться, чтобы это было видно, когда вы делаете статус git. Убедитесь, что эти каталоги еще не добавлены в git, так как это переопределит игнорирование.


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


все вышеуказанные ответы действительны, но что-то, что я не думаю, упоминается, что, как только вы добавите файл из этого каталога в репо, вы не можете игнорировать этот каталог/подкаталог, содержащий этот файл (git будет игнорировать эту директиву). Сначала вам нужно удалить все файлы из целевого каталога из РЕПО, а затем вы можете игнорировать эту папку.


кроме того, поставив правильные записи в вашем .gitignore файл, если вы пытаетесь игнорировать что-то уже добавленное в репо, вы должны сделать git rm -r /path/to/dir и зафиксируйте это, прежде чем добавлять dir к вашему.файла.gitignore В противном случае единственное, что Git будет игнорировать ваш игнорировать директивы.


единственный способ заставить это работать на моей машине - сделать это так:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

обратите внимание, как вы должны явно разрешить содержание для каждого уровня, который вы хотите включить. Поэтому, если у меня есть подкаталоги 5 глубоко под темами, мне все равно нужно это объяснить.

это из комментария @Yarin здесь:https://stackoverflow.com/a/5250314/1696153

Это были полезные темы:

Я тоже пробовал

*
*/*
**/**

и **/wp-content/themes/**

или /wp-content/themes/**/*

ничего из этого не сработало и для меня. Много следов и ошибок!


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

**/

это работает с версии 1.8.2 git.


универсальный способ игнорировать все подпапки, продолжая отслеживать файлы, которые находятся в можно было бы добавить следующую строку в ваш проект .файл пример:

bin/*/*

если вы хотите игнорировать только определенные именованные подпапки, вы можете сделать:

bin/Debug/*
bin/Release/*

nb. если bin каталог не находится в корне вашего проекта (наряду с .gitignore file), то вместо eg. bin/*/* вам понадобится path/to/bin/*/*


чтобы исключить содержимое и подкаталоги:

**/bin/*

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

**/bin/*/