Git игнорировать подпапки

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

.gitignore с "bin/" игнорирует папки "Отладка" и "Отпустить", а также любую DLL, содержащуюся в папке "bin".

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

Любые предложения?

Ответ 1

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

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

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

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

Ответ 2

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

Debug/
Release/

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

# Ignore all directories, and all sub-directories, and it 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/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*

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

Это комментарий от @Yarin здесь: fooobar.com/questions/11138/...

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

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

*
*/*
**/**

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

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

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

Ответ 7

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

bin/*/*

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

bin/Debug/*
bin/Release/*

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

Ответ 8

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

**/

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

Ответ 9

Мне нужно было внести изменения, внесенные в каталог dirname/. Теперь добавив dirname/ в .gitignore, каталог dirname теперь игнорируется.