Git игнорировать подпапки - PullRequest
357 голосов
/ 30 марта 2010

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

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

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

Есть предложения?

Ответы [ 9 ]

462 голосов
/ 30 марта 2010

Вы пробовали подстановочные знаки?

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

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

**/bin/Debug/
**/bin/Release/
95 голосов
/ 30 марта 2010

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

Debug/
Release/

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

47 голосов
/ 24 апреля 2013

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

34 голосов
/ 08 марта 2015

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

24 голосов
/ 07 марта 2016

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

16 голосов
/ 30 апреля 2015

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

# 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 глубоко под темами, мне все еще нужно разобрать это.

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

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

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

*
*/*
**/**

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

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

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

5 голосов
/ 01 ноября 2016

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

**/

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

5 голосов
/ 15 февраля 2016

Общий способ игнорирования всех подпапок при продолжении отслеживания файлов в каталоге /bin заключается в добавлении следующей строки в файл .gitignore вашего проекта:

bin/*/*

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

bin/Debug/*
bin/Release/*

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

4 голосов
/ 18 июня 2018

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

**/bin/*

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

**/bin/*/
...