Ігнорування файлів
Останнє оновлення 2025-01-24 | Редагувати цю сторінку
Огляд
Питання
- Як зробити так, щоб Git ігнорував файли, які я не хочу відстежувати?
Цілі
- Налаштувати Git для ігнорування певних файлів.
- Зрозуміти чому ігнорування файлів може бути корисним.
Що робити, якщо у нас є файли, які ми не хочемо відстежувати у Git, наприклад, резервні файли, створені нашим редактором або проміжні файли, створені під час аналізу даних? Створімо декілька фіктивних файлів:
і подивимося, що скаже Git:
ВИХІД
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.png
b.png
c.png
receipts/
nothing added to commit but untracked files present (use "git add" to track)
Відстеження цих файлів за допомогою контролю версій буде марною тратою місця на диску. Що гірше, висвітлення змін в них під час перегляду історії або статусу проєкту може відвернути нас від змін, які насправді важливі, Тож скажімо Git, що ці файли треба ігнорувати.
Ми можемо зробити це, створюючи у кореневому каталозі нашого проєкту
файл під назвою .gitignore
:
ВИХІД
*.png
receipts/
Ці шаблони наказують Git ігнорувати будь-який файл, ім’я якого
закінчується на .png
, і все в каталозі
receipts
. (Якщо будь-які з цих файлів вже відстежуються, то
Git продовжить їх відстежувати.)
Як тільки ми створили цей файл, результат команди
git status
стає набагато зрозумілішим:
ВИХІД
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Єдина річ, яку Git помічає зараз - це новостворений файл
.gitignore
. Ви можете подумати, що його не треба
відстежувати, але всі, з ким ми ділимося нашим репозиторієм, ймовірно,
захочуть ігнорувати ті самі речі, які ігноруємо ми. Додамо до
репозиторію та здійснимо коміт файлу .gitignore
:
ВИХІД
On branch main
nothing to commit, working tree clean
Як бонус, використання .gitignore
допомагає нам уникнути
випадкового додавання до репозиторію файлів, які ми не хочемо
відстежувати:
ВИХІД
The following paths are ignored by one of your .gitignore files:
a.png
Use -f if you really want to add them.
Якщо ми дійсно хочемо змінити наші налаштування ігнорування, ми
можемо використати git add -f
, щоб змусити Git щось додати.
Наприклад, git add -f a.csv
. Якщо потрібно, можна також
побачити статус ігнорованих файлів:
ВИХІД
On branch main
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
a.png
b.png
c.png
receipts/
nothing to commit, working tree clean
Якщо ви хочете ігнорувати лише вміст receipts/plots
, ви
можете зробити це шляхом додавання наступного рядка до вашого
.gitignore
:
ВИХІД
receipts/plots/
Цей рядок забезпечить ігнорування лише вмісту
receipts/plots
, але не вмісту
receipts/data
.
Як і в більшості питань програмування, є ще кілька альтернативних способів, які можуть забезпечити виконання цього правила ігнорування. Вправа “Варіант ігнорування вкладених файлів” нижче має трохи іншу структуру каталогів, та пояснює альтернативну відповідь. Крім того, сторінка обговорення має більш детальну інформацію про правила ігнорування.
Додавання конкретних файлів
Як ігнорувати всі файли .png
у кореневому каталозі, за
винятком final.png
? Підказка: дізнайтеся, що робить
!
(оператор знаку оклику).
Треба додати наступні два рядки до вашого файлу
.gitignore
:
ВИХІД
*.png # ignore all png files
!final.png # except final.png
Знак оклику призведе до включення раніше виключеного запису.
Зауважте також, що оскільки ви вже зберегли файли .png
у
комітах у цьому уроці, вони не будуть проігноровані цим новим правилом.
Тільки майбутні додавання .png
файлів до кореневого
каталогу будуть проігноровані.
Варіант ігнорування вкладених файлів
Нехай ми маємо структуру каталогів, яка виглядає подібно до попередньої вправи “Ігнорування файлів у підкаталогах”, проте дещо відрізняється:
Як би ви проігнорували весь вміст у каталозі receipts
,
крім receipts/data
?
Підказка: подумайте про те, як ви раніше зробили виняток за допомогою
оператору !
.
Щоб проігнорувати все в каталозі receipts/
без
receipts/data/
, можна змінити ваш.gitignore
,
щоб ігнорувати вміст каталогу receipts
, але створити
виняток для вмісту підкаталогу receipts/data
. Ваш
.gitignore
буде виглядати так:
ВИХІД
receipts/* # ігнорувати все в каталозі receipts
!receipts/data/ # не ігнорувати вміст каталогу receipts/data/
Ігнорування всіх файлів з даними у каталозі
Припустимо, що у вас порожній файл .gitignore
, і ви
бачите структуру каталогів, яка виглядає так:
BASH
receipts/data/market_position/gps/a.dat
receipts/data/market_position/gps/b.dat
receipts/data/market_position/gps/c.dat
receipts/data/market_position/gps/info.txt
receipts/plots
Яке найкоротше правило ви можете додати до .gitignore
,
щоб ігнорувати всі файли з розширенням .dat
у каталозі
result/data/market_position/gps
? При цьому, не ігноруйте
info.txt
.
Додавання receipts/data/market_position/gps/*.dat
призведе до ігнорування усіх файлів у
receipts/data/market_position/gps
, які закінчуються на
.dat
. Файл
receipts/data/market_position/gps/info.txt
не буде
проігноровано.
Ігнорування всіх файлів з даними у репозиторії
Припустимо тепер, що у вас є багато файлів з розширенням
.csv
в різних підкаталогах вашого репозиторію. Наприклад,
ви можете мати:
BASH
results/a.csv
data/experiment_1/b.csv
data/experiment_2/c.csv
data/experiment_2/variation_1/d.csv
Як ігнорувати всі файли .csv
без явного переліку усіх
відповідних каталогів?
Додайте наступний рядок до файлу .gitignore
:
ВИХІД
**/*.csv
Це призведе до ігнорування усіх файлів .csv
, незалежно
від їх розташування у дереві каталогів. Ви все ще можете робити певні
винятки з цього правила за допомогою знаку оклику.
Оператор !
скасує запис з попередньо визначеного шаблону
ігнорування. Оскільки запис ! *.csv
скасовує всі попередні
файли .csv
в .gitignore
, жоден з них не буде
проігноровано, і всі файли .csv
будуть відстежуватися.
Log-файли
Ви написали скрипт, який створює багато проміжних log-файлів з
назвами log_01
, log_02
, log_03
тощо. Ви хочете зберегти їх, але не бажаєте відстежувати їх за допомогою
git
.
Додайте до
.gitignore
один рядок, який виключає файлиlog_01
,log_02
тощо.Перевірте свій “шаблон ігнорування”, створивши деякі фіктивні файли з назвами
log_01
,log_02
тощо.Уявіть тепер, що файл
log_01
дуже важливий, та додайте його до відстежуваних файлів, не змінюючи.gitignore
.Обговоріть з сусідом, які інші типи файлів можуть перебувати у вашому проєкті, які ви не бажаєте відстежувати і тому бажаєте проігнорувати за допомогою
.gitignore
.
додайте або
log_*
абоlog*
як новий рядок до вашого.gitignore
відстежуйте
log_01
за допомогоюgit add -f log_01
Ключові моменти
- Текстовий файл
.gitignore
інформує Git про те, які файли треба ігнорувати в репозиторії. - Ви можете вказати певні файли або каталоги, які Git буде ігнорувати, або вказати типи файлів, які зазвичай ігноруються.