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.0 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]