Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.42.1 → 2.51.1 no changes
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.34.1 → 2.40.4 no changes
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 no changes
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.22.2 → 2.31.8 no changes
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 no changes
-
2.16.6
2019-12-06
- 2.10.5 → 2.15.4 no changes
-
2.9.5
2017-07-30
- 2.5.6 → 2.8.6 no changes
-
2.4.12
2017-05-05
- 2.3.10 no changes
- 2.2.3 no changes
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
ОПИС
Файл 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]