hello/ игнорирует все папки с именем "hello" в любой папке структуры
hello/* только игнорирует папку "привет" на верхнем уровне.
Почему это? Укажите http://git-scm.com/docs/gitignore, который объясняет это поведение.
hello/ игнорирует все папки с именем "hello" в любой папке структуры
hello/* только игнорирует папку "привет" на верхнем уровне.
Почему это? Укажите http://git-scm.com/docs/gitignore, который объясняет это поведение.
Это может показаться странным, но это позволяет нам сопоставлять каталоги несколькими способами: файлами или каталогами в любом месте, каталогами в любом месте или каталогами на верхнем уровне. Эта универсальность очень полезна и может препятствовать загромождению .gitignore.
(FYI, если у вас есть Git 1.8.2+, вы можете использовать git check-ignore, чтобы помочь отладить это.)
Если вы поместите foo, он будет соответствовать всем файлам и каталогам с именем foo.
Если вы поместите foo/, он будет соответствовать только каталогам с именем foo.
Если шаблон заканчивается косой чертой, он удаляется для целей следующего описания, но он будет находить совпадение с каталогом. Другими словами, foo/будет соответствовать каталогу foo и paths под ним, но не будет соответствовать регулярному файлу или символической ссылке foo (это согласуется с тем, как метод pathspec работает вообще в Git).
Если вы добавите *, как в foo/*, он рассматривается как файл glob (относительно .gitignore).
В противном случае Git рассматривает шаблон как оболочку оболочки, подходящую для использования fnmatch (3) с флагом FNM_PATHNAME: подстановочные знаки в шаблоне не совпадают с/в пути. Например, "Documentation/*. Html" соответствует "Documentation/git.html", но не "Documentation/ppc/ppc.html" или "tools/perf/Documentation/perf.html".
Таким образом, для foo/*, Git будет игнорировать все файлы и каталоги в каталоге верхнего уровня foo. Он будет игнорировать foo/dir, foo/file.txt и т.д. (Технически это не будет игнорировать сам foo, но он будет игнорировать его дочерние элементы. Однако, поскольку Git не отслеживает каталоги, он имеет тот же эффект.)
FYI, foo/** будет иметь такое же поведение.
Моя рекомендация:
Если вы хотите игнорировать каталог foo на верхнем уровне, IMO, это наиболее очевидно использовать это правило:
Ведущая косая черта соответствует началу пути. Например, "/*.c" соответствует "cat-file.c", но не "mozilla-sha1/sha1.c".
Итак, вы можете написать /foo/, и он будет игнорировать каталог foo на верхнем уровне, но нигде больше.
Соответствующий отрывок:
Git рассматривает шаблон как оболочку, подходящую для потребления,
fnmatch, с помощью:
*' для верхних файлов**' все внутри, с бесконечной глубинойfnmatch - это функция, которая проверяет, соответствует ли аргумент строки аргументу шаблона, который является шаблоном шаблона оболочки.
Это полезно, если исключить вложенные папки из правила игнорирования, как я упоминал в Как включить файлы lib внутри папки [/Libs/x64/Release] в репозитории Git "
Libs/**/*
!Libs/x64/Release/
Это игнорирует все, кроме папки Libs/x64/Release.
В любом случае команда git check-ignore -v очень полезна для проверки того, какое правило .gitignore применяется для любого конкретного файла.