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.54.0
2026-04-20
- 2.53.0 no changes
-
2.52.0
2025-11-17
- 2.42.1 → 2.51.2 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.
У який файл слід помістити шаблон, залежить від того, як цей шаблон планується використовувати.
-
Шаблони, які слід додати до системи контролю версій і розповсюджувати в інші репозиторії за допомогою команди 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]