Я намагаюся зрозуміти .gitignore
синтаксис більш чітко , зокрема, що стосується https://github.com/github/gitignore gitignores.
Я бачу, що провідна коса риса використовується для узгодження лише імен шляхів відносно місця розташування .gitignore
файлу (від http://git-scm.com/docs/gitignore ):
Початкова косою рисою відповідає початок назви шляху. Наприклад, "/*.c" відповідає "cat-file.c", але не "mozilla-sha1 / sha1.c".
Але що відбувається, коли я видаляю провідну косу рису? Наскільки я зрозумів, є два випадки:
- Якщо шаблон не містить косую рису (або вона містить лише косуй косу рису, а це означає, що вона повинна відповідати каталогу), пошук проводиться у всьому дереві каталогів. Наприклад, шаблон
dir/
буде відповідати<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
і т.д., де<root>
є місце.gitignore
файлу. - Якщо візерунок містить косу рису, яка не знаходиться в кінцевому положенні (це не останній символ), то вона узгоджується лише з іменами шляхів відносно
.gitignore
місця розташування файлу.
Ось приклади, які я зробив для перевірки такої поведінки:
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
Перший тест:
# .gitignore
dir/
# git status
nothing to commit
Тож Git ігнорує обидва dir
каталоги. Це узгоджується з випадком № 1: у шаблону немає косої риси (крім останньої), тому Git дивиться все дерево каталогів, ігноруючи все, що відповідає шаблону.
Другий тест:
# .gitignore
/dir/
# git status
Untracked files:
src/
Тут Git ігнорує лише dir
каталог безпосередньо під кореневим каталогом, завдяки провідній косою рисою в шаблоні.
Третій тест:
# .gitignore
dir/*
# git status
Untracked files:
src/
Це узгоджується із випадком № 2: шаблон має деяку косу рису всередині нього, тому він розглядається як ім'я шляху, що починається з кореневого каталогу.
Тепер час для справжнього питання. Розглянемо цей файл gitignore : наприклад, коли вони ігнорують каталог downloader/
, чи не насправді вони ігнорують кожен окремий downloader
каталог, знайдений у цілому дереві каталогів? Це те, що я змушений думати, оскільки я бачив про роботу Гіта раніше.
Отже, якщо у мене трапиться спеціальний модуль із downloader
каталогом всередині нього, чи буде він несподівано ігнорований, а також звичайний у корені Magento? Це трохи реторичне запитання, оскільки воно насправді вже трапилося зі мною, що спричинило помилку.
Так, в Magento .gitignore
файл (який я маю в виду тільки як приклад, до речі) багато моделей містять слеш, так що вони правильно підібрані проти імен шляхів , починаючи від кореня, але є кілька випадків, як downloader/
і errors/
що , якщо я не помиляюся, вони є потенційно небезпечними, і їх, мабуть, слід змінити на /downloader/
та /errors/
.
Що стосується більш загального питання, чи повинен я завжди використовувати провідну косу рису для шаблонів, що не містять косої риси (за винятком трейлінга), коли я хочу вибрати ім'я шляху, явно починаючи з кореня, а не використовувати його для шаблонів, що містять косу рису, чи я повинен завжди використовувати провідну косу рису для наочності? Що ви думаєте про це?
Дякую за прочитання та вибачте за довгий пост.