.gitignore і підмодулі Git: виключення файлів та підключення проєктів
Коротко: Файл .gitignore визначає, що Git не версіонує; підмодулі (submodules) підключають інший репозиторій у фіксованому стані до вашого.
Докладніше: Не все в теці проєкту має бути під контролем версій: згенеровані файли, залежності, секрети. А іноді потрібен чужий чи спільний код без копіювання.
Подробиці
.gitignore
.gitignore містить шаблони для файлів, які Git має пропускати:
node_modules/
dist/
*.log
.env
.DS_Store
!important.log # виняток із !
/build # лише в головній теці
Коментарі починаються з #. .gitignore діє лише для ще не відстежуваних файлів. Якщо щось уже було додано, воно лишається відстежуваним, доки ви не приберете це з індексу командою git rm --cached file. Файли для конкретних тек можуть лежати в підтеках; глобальні правила лежать у ~/.config/git/ignore. Шаблони для багатьох мов пропонують gitignore.io і репозиторій github/gitignore.
Секрети
Паролі, API-ключі та файли .env ніколи не мають потрапляти в репозиторій. Одного разу доданий секрет лишається в історії й має вважатися скомпрометованим: негайно відкличте й оновіть ключі; видалення з історії (git filter-repo) трудомістке. Краще покласти .env.example без значень.
Підмодулі
Підмодуль — це посилання на конкретний коміт іншого репозиторію:
git submodule add https://github.com/company/library libs/library
git clone --recurse-submodules <url> # клонувати з підмодулями
git submodule update --init --recursive # завантажити потім
git submodule update --remote # перейти на новіший стан
Файл .gitmodules зберігає шлях та адресу. Головний проєкт запам’ятовує точний коміт, тож усі використовують один і той самий стан.
Коли підмодулі, коли альтернативи
Підмодулі придатні, але схильні до помилок: їх забувають оновлювати або надсилають зміни лише в головний проєкт. Часто простіші менеджери пакетів (npm, pip, Maven) або монорепозиторій. Варіант — піддерева (subtrees) (git subtree), які копіюють код замість посилання на нього.
Див. також: Git, Змінні середовища, Монорепозиторій, API-ключі