шаблон gitignore не работает без двойных звездочек - PullRequest
0 голосов
/ 09 декабря 2018

Этот шаблон работает правильно:

**/Assets/Plugins/Editor/JetBrains*

Но этот шаблон не работает:

Assets/Plugins/Editor/JetBrains*

Насколько я знаю, эти два шаблона эквивалентны.В чем может быть проблема здесь?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Насколько я знаю, эти два шаблона эквивалентны.

Это не так.

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 было бы непривычно, поэтому мы говорим "игнорировать" ...

0 голосов
/ 09 декабря 2018

**/Assets/Plugins/Editor/JetBrains*
Будет игнорировать путь, независимо от того, что является корневой папкой Активов, что означает, что он может быть вложенным.

Assets/Plugins/Editor/JetBrains*
Будет игнорировать статингу пути из текущая папка

**/ означает, что она может быть «вложена» в любую папку под местоположением текущего пути

...