українська мова ▾ Topics ▾ Latest version ▾ gitignore last updated in 2.42.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.

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

  • Шаблони, які мають бути контрольованими версіями та розповсюджуватися до інших репозиторіїв через клон (тобто файли, які всі розробники захочуть ігнорувати), слід помістити у файл .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 для отримання детальнішого опису.

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

  • Початковий символ "**", а потім скісний риса, означає збіг у всіх каталогах. Наприклад, "**/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 (це узгоджується з тим, як pathspec працює загалом у Git)

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

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

    $ git status
    [...]
    # Невідстежувані файли:
    [...]
    #       Документація/foo.html
    #       Документація/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]