українська мова ▾ Topics ▾ Latest version ▾ gitignore last updated in 2.54.0

НАЗВА

gitignore — Визначає файли, які навмисно не відстежуються та які слід ігнорувати

СИНОПСИС

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

ОПИС

Файл gitignore визначає файли, які Git повинен ігнорувати, оскільки вони навмисно не відстежуються. Це не стосується файлів, які вже відстежуються Git; детальніше див. розділ ПРИМІТКИ нижче.

Кожен рядок у файлі gitignore задає шаблон. При визначенні того, чи слід ігнорувати шлях, Git зазвичай перевіряє шаблони з файлу gitignore, що містяться в різних джерелах, у такому порядку пріоритетності, від найвищого до найнижчого (у межах одного рівня пріоритетності результат визначає останній шаблон, що задовольняє критеріям):

  • Шаблони зчитуються з командного рядка для тих команд, які їх підтримують.

  • Шаблони зчитуються з файлу .gitignore, розташованого в тій самій теці, що й шлях, або в будь-якій батьківській теці (аж до верхнього рівня робочого дерева), причому шаблони у файлах вищого рівня замінюються шаблонами з файлів нижчого рівня аж до теки, що містить цей файл. Ці шаблони порівнюються відносно розташування файлу .gitignore. Зазвичай проєкт включає такі файли .gitignore у своє сховище, що містять шаблони для файлів, згенерованих у процесі побудови проєкту.

  • Шаблони отримані з $GIT_DIR/info/exclude.

  • Шаблони, що зчитуються з файлу, визначеного змінною конфігурації core.excludesFile.

У який файл слід помістити шаблон, залежить від того, як цей шаблон планується використовувати.

  • Шаблони, які слід додати до системи контролю версій і розповсюджувати в інші репозиторії за допомогою команди clone (тобто файли, які всі розробники захочуть проігнорувати), слід внести до файлу .gitignore.

  • Шаблони, що є специфічними для певного репозиторію, але не потребують спільного використання з іншими повʼязаними репозиторіями (наприклад, допоміжні файли, що знаходяться всередині репозиторію, але є специфічними для робочого процесу одного користувача), слід помістити у файл $GIT_DIR/info/exclude.

  • Шаблони, які користувач хоче, щоб Git ігнорував у будь-яких ситуаціях (наприклад, резервні копії або тимчасові файли, створені обраним користувачем редактором), зазвичай вказуються у файлі, визначеному параметром core.excludesFile у файлі ~/.gitconfig користувача. Його стандартне значення — $XDG_CONFIG_HOME/git/ignore. Якщо $XDG_CONFIG_HOME не встановлено або є порожнім, замість нього використовується $HOME/.config/git/ignore.

Підлеглі інструменти Git, такі як git ls-files і git read-tree, зчитують шаблони gitignore, вказані в параметрах командного рядка або у файлах, вказаних у параметрах командного рядка. Інструменти Git вищого рівня, такі як git status і git add, використовують шаблони з джерел, зазначених вище.

ФОРМАТ ШАБЛОНУ

  • Порожній рядок не відповідає жодному файлу, тому його можна використовувати як роздільник для зручності читання.

  • Рядок, що починається з символу #, є коментарем. Поставте зворотну скісну риску ("\") перед першим хешем для шаблонів, які починаються з символу хешу.

  • Пробіли в кінці рядка ігноруються, якщо вони не екрановані скісною рискою («\»).

  • Необов’язковий префікс «!», який інвертує шаблон; будь-який файл, що відповідає шаблону та був виключений попереднім шаблоном, знову буде включено. Неможливо повторно включити файл, якщо його батьківська тека виключена. З міркувань продуктивності Git не показує список виключених тек, тому будь-які шаблони для файлів у цих теках не діють, незалежно від того, де вони визначені. Поставте зворотну косу риску («\») перед першим «!» для шаблонів, що починаються з літери «!», наприклад, «\!important!.txt».

  • Скісна риска «/» використовується як роздільник тек. Роздільники можуть знаходитися на початку, посередині або в кінці шаблону пошуку .gitignore.

  • Якщо на початку або посередині (або в обох) шаблону є роздільник, то шаблон залежить від рівня теки конкретного файлу .gitignore. В іншому випадку шаблон може також збігатися на будь-якому рівні нижче рівня .gitignore.

  • Якщо в кінці шаблону є роздільник, то шаблон відповідатиме лише текам, інакше шаблон може відповідати як файлам, так і текам.

  • Наприклад, шаблон doc/frotz/ відповідає теці doc/frotz, але не теці a/doc/frotz; проте frotz/ відповідає frotz та a/frotz, що є теками (усі шляхи є відносними до файлу .gitignore).

  • Зірочка «*» відповідає будь-якому символу, крім скісної риски. Символ «?» відповідає будь-якому символу, крім «/». За допомогою нотації діапазону, наприклад [a-zA-Z], можна знайти будь-який символ із зазначеного діапазону. Детальніше див. fnmatch(3) та прапорець FNM_PATHNAME.

  • Для екранування будь-якого символу можна використовувати зворотну скісну риску («\»). Наприклад, «\*» відповідає літерній зірочці (а «\a» відповідає «a», хоча в цьому випадку екранування не потрібне). Як і у функції fnmatch(3), зворотна скісна риска в кінці шаблону означає недійсний шаблон, який ніколи не знайде збігу.

Дві зірочки поспіль («**») у виразах, що порівнюються з повним іменем шляху, можуть мати особливе значення:

  • Символ «**», за яким йде скісна риска, означає пошук у всіх теках. Наприклад, «**/foo» знаходить файл або теку «foo» у будь-якому місці, так само як і шаблон «foo». «**/foo/bar» знаходить файл або теку «bar» у будь-якому місці, що знаходиться безпосередньо в теці «foo».

  • Закінчення «/**» відповідає всьому вмісту теки. Наприклад, «abc/**» відповідає всім файлам у теці «abc», відносно розташування файлу .gitignore, на будь-якій глибині.

  • Скісна риска, за якою йдуть дві зірочки поспіль, а потім ще одна скісна риска, відповідає нулю або більше тек. Наприклад, «a/**/b» збігається з «a/b», «a/x/b», «a/x/y/b» тощо.

  • Інші послідовні зірочки вважаються звичайними зірочками і будуть зіставлятися відповідно до попередніх правил.

КОНФІГУРАЦІЯ

Опціональна змінна конфігурації core.excludesFile вказує шлях до файлу, що містить шаблони імен файлів для виключення, подібно до $GIT_DIR/info/exclude. Шаблони у файлі виключень використовуються на додачу до тих, що у $GIT_DIR/info/exclude.

ПРИМІТКИ

Мета файлів gitignore полягає в тому, щоб певні файли, які не відстежуються Git, залишалися невідстежуваними.

Щоб зупинити відстеження файлу, який наразі відстежується, скористайтеся командою git rm --cached для видалення файлу з індексу. Імʼя файлу потім можна додати до файлу .gitignore, щоб запобігти повторному додаванню файлу в наступних комітах.

Git не переходить за символічними посиланнями під час доступу до файлу .gitignore у робочому дереві. Це забезпечує узгодженість поведінки під час доступу до файлу з індексу або дерева, а не з файлової системи.

ПРИКЛАДИ

  • Шаблон hello.* відповідає будь-якому файлу або теці, імʼя яких починається з hello.. Якщо потрібно обмежити це лише текою, а не її вкладеними теками можна додати перед шаблоном скісну риску, наприклад /hello.*; шаблон тепер відповідає hello.txt, hello.c, але не a/hello.java.

  • Шаблон foo/ буде збігатися з текою foo та шляхами, що знаходяться в ній, але не буде збігатися зі звичайним файлом або символічним посиланням foo (це відповідає загальному принципу роботи специфікації шляху в Git)

  • Шаблони doc/frotz та /doc/frotz мають однаковий ефект у будь-якому файлі .gitignore. Іншими словами, початкова скісна риска не має значення, якщо у шаблоні вже є скісна риска посередині.

  • Шаблон foo/* відповідає foo/test.json (звичайний файл), foo/bar (тека), але не відповідає foo/bar/hello.c (звичайний файл), оскільки зірочка у шаблоні не відповідає bar/hello.c, який містить скісну риску.

    $ git status
    [...]
    # Невідстежувані файли:
    [...]
    #       Documentation/foo.html
    #       Documentation/gitignore.html
    #       file.o
    #       lib.a
    #       src/internal.o
    [...]
    $ cat .git/info/exclude
    # ігнорувати обʼєкти та архіви будь-де в дереві.
    *.[oa]
    $ cat Documentation/.gitignore
    # ігнорувати згенеровані html-файли,
    *.html
    # крім foo.html, який підтримується вручну
    !foo.html
    $ git status
    [...]
    # Невідстежувані файли:
    [...]
    #       Documentation/foo.html
    [...]

Інший приклад:

    $ cat .gitignore
    vmlinux*
    $ ls arch/foo/kernel/vm*
    arch/foo/kernel/vmlinux.lds.S
    $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore

Другий .gitignore запобігає ігноруванню Git arch/foo/kernel/vmlinux.lds.S.

Приклад виключення всього, крім певної теки foo/bar (зверніть увагу на символ /* — без скісної риски, символ-замінник також виключає все, що міститься в теці foo/bar):

    $ cat .gitignore
    # виключити все, крім теки foo/bar
    /*
    !/foo
    /foo/*
    !/foo/bar

GIT

Частина набору git[1]