Насколько я знаю, эти два шаблона эквивалентны.
Это не так.
Git имеет плохо документированную подлую особенность (ошибка? Раздражение)называйте его как хотите, хотя это и подразумевается как функция), в которой шаблон глоба в файле .gitignore
иногда привязывается или укореняется - неясно, какое слово использовать здесь, а иногда нет.Я думаю, что это лучше всего объяснить на примере.
Предположим, у вас есть следующие файлы:
/a
/b
/dir/a
/dir/b
/dir/sub/a
/dir/sub/b
То есть каталог верхнего уровня содержит два файла, a
и b
,и один каталог dir
.Внутри dir
есть два файла a
и b
и еще один каталог sub
, и в этом последнем есть два файла a
и b
.
Листинг a
в вашем .gitignore
означает игнорировать все файлы с именами a
, 1 , чтобы охватить три из шести файлов.
Однако, указав /a
в вашем.gitignore
означает игнорировать файл с именем a
только на верхнем уровне , то есть игнорировать только один файл.
Это косая черта в любой позиции, кромеend , который запускает эту функцию, поэтому перечисление dir/a
в файле верхнего уровня означает игнорировать файл с именем a
в каталоге dir
только , то есть просто /dir/a
.Если мы создадим новый файл dir/sub/dir/a
, он будет игнорироваться , а не : dir/a
означает то же самое, что и /dir/a
.
Можно ожидать, что только ведущий косая черта, чтобы сделать это, но на самом деле, это любой косая черта, , кроме в конце , который делает это., кроме конца , означает, что если вы перечислите sub/
в вашем верхнем уровне .gitignore
, Git будет игнорировать оба файла внутри dir/sub
, потому что слеш удаляется с конца перед применением "содержит правило «косой черты», а затем ставит его в конце для правила «соответствует каталогу».
В результате получается, что если вы хотите игнорировать Assets/Plugins/Editor/JetBrains*
на любом уровне , а нетолько текущий уровень (где этот конкретный файл .gitignore
находится в вашем рабочем дереве) - вам нужен префикс **/
.
Обратите внимание, что вы можете иметь файл .gitignore
с каждый level, так что вы можете просто найти каталоги с именем Editor
, и если они находятся в каталоге Assets/Plugins/
, содержащем каталог, создайте .gitignore
здесь со списком JetBrains*
.Это будет иметь тот же эффект, что и запись **/Assets/Plugins/Editor/JetBrains*
на верхнем уровне.
1 Игнорировать - действительно неправильный глагол.Файл не будет проигнорирован, если он уже отслежен;перечисление файла в .gitignore
означает не жалуйтесь на этот файл, если он не отслежен, и не добавляйте его автоматически с помощью команды «добавить все файлы». Это также дает Git разрешение наУдарьте файл в некоторых случаях.Но вызывать файл .git-dont-complain-about-untracked-and-dont-auto-add-and-sometimes-feel-free-to-clobber-these-files
было бы непривычно, поэтому мы говорим "игнорировать" ...