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


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

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

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

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

9 291

9 ответов:

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

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

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

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

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

Debug/
Release/

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

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

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

кроме того, положить правильные записи в вашем .gitignore file, если вы пытаетесь игнорировать что-то уже добавленное в репо, вы должны сделать 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/*/*

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

bin/Debug/*
bin/Release/*

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

для исключения содержимого и поддиректории:

**/bin/*

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

**/bin/*/