Ігнорування файлів
Останнє оновлення 2024-06-04 | Редагувати цю сторінку
Приблизний час: 5 хвилин
Огляд
Питання
- Як зробити так, щоб Git ігнорував файли, які я не хочу відстежувати?
Цілі
- Налаштувати Git для ігнорування певних файлів.
- Зрозуміти чому ігнорування файлів може бути корисним.
Що робити, якщо у нас є файли, які ми не хочемо відстежувати у Git, наприклад, резервні файли, створені нашим редактором або проміжні файли, створені під час аналізу даних? Створімо декілька фіктивних файлів:
і подивимося, що скаже Git:
ВИХІД
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.csv
b.csv
c.csv
results/
nothing added to commit but untracked files present (use "git add" to track)
Відстеження цих файлів за допомогою контролю версій буде марною тратою місця на диску. Що гірше, висвітлення змін в них під час перегляду історії або статусу проєкту може відвернути нас від змін, які насправді важливі, Тож скажімо Git, що ці файли треба ігнорувати.
Ми можемо зробити це, створюючи у кореневому каталозі нашого проєкту
файл під назвою .gitignore
:
ВИХІД
*.csv
results/
Це шаблони, які наказують Git ігнорувати будь-який файл, ім’я якого
закінчується на .dat
, а також усе, що знаходиться у
каталозі results
. (Якщо будь-які з цих файлів вже
відстежуються, то 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.csv
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.csv
b.csv
c.csv
results/
nothing to commit, working tree clean
Якщо ви хочете ігнорувати лише вміст results/plots
, ви
можете зробити це шляхом додавання наступного рядка до вашого
.gitignore
:
ВИХІД
results/plots/
Цей рядок забезпечить ігнорування лише вмісту
results/plots
, але не вмісту results/data
.
Як і в більшості питань програмування, є ще кілька альтернативних способів, які можуть забезпечити виконання цього правила ігнорування. Вправа “Варіант ігнорування вкладених файлів” нижче має трохи іншу структуру каталогів, та пояснює альтернативну відповідь. Крім того, сторінка обговорення має більш детальну інформацію про правила ігнорування.
Додавання конкретних файлів
Як ігнорувати всі файли .dat
у кореневому каталозі, за
винятком final.csv
? Підказка: дізнайтеся, що робить
!
(оператор знаку оклику).
Треба додати наступні два рядки до вашого файлу
.gitignore
:
ВИХІД
*.csv # ігнорувати усі файли з даними
!final.csv # окрім final.csv
Знак оклику призведе до включення раніше виключеного запису.
Зверніть увагу також на те, що, оскільки ви раніше вже зберегли файли
.csv
у комітах, зроблених в цьому уроці, вони не будуть
проігноровані після додавання цього нового правила. Тільки майбутні
додавання .csv
файлів до кореневого каталогу будуть
проігноровані.
Варіант ігнорування вкладених файлів
Нехай ми маємо структуру каталогів, яка виглядає подібно до попередньої вправи “Ігнорування файлів у підкаталогах”, проте дещо відрізняється:
Як би ви проігнорували весь вміст у каталозі results
,
окрім results/data
?
Підказка: подумайте про те, як ви раніше зробили виняток за допомогою
оператору !
.
Якщо ви хочете ігнорувати вміст каталогу results/
, але
не каталогу results/data/
, ви можете змінити
ваш.gitignore
, щоб ігнорувати вміст каталогу
results
, але створити виняток для вмісту підкаталогу
results/data
. Ваш .gitignore
буде виглядати
так:
ВИХІД
results/* # ігнорувати все в каталозі results
!results/data/ # не ігнорувати вміст results/data/
Ігнорування всіх файлів з даними у каталозі
Припустимо, що у вас порожній файл .gitignore
, і ви
бачите структуру каталогів, яка виглядає так:
BASH
results/data/position/gps/a.csv
results/data/position/gps/b.csv
results/data/position/gps/c.csv
results/data/position/gps/info.txt
results/plots
Яке найкоротше правило ви можете додати до .gitignore
,
щоб ігнорувати всі файли з розширенням .csv
у каталозі
result/data/position/gps
? При цьому, не ігноруйте
info.txt
.
Додавання results/data/position/gps/*.csv
призведе до
ігнорування усіх файлів у results/data/position/gps
, які
закінчуються на .csv
. Файл
results/data/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 про те, які файли треба ігнорувати.