Git-репозиторій — це сховище вихідного коду проекту, в якому Git відстежує кожну зміну файлів протягом усієї розробки. Репозиторій містить повну історію комітів, гілок і тегів, що дозволяє розробникам спільно працювати над кодом. За даними Git, 2024, репозиторій є основою будь-якої системи контролю версій і використовується в мільйонах проектів по всьому світу.
Головне
Репозиторій Git — це структура даних, у якій система контролю версій зберігає метадані та об’єкти, що описують історію змін файлів проекту. Коли розробник ініціалізує репозиторій командою git init, Git створює приховану папку .git у корені проекту.
Усередині цієї папки знаходяться всі об’єкти, посилання та конфігураційні файли, необхідні для роботи системи. Репозиторій не прив’язаний до конкретного розташування — розробник може створити його локально, а потім зв’язати з віддаленим сервером.
Git використовує модель розподіленого репозиторію: кожен учасник проекту має повну копію історії на своєму комп’ютері. Це означає, що більшість операцій — коміт, перегляд історії, створення гілок — виконуються локально без звернення до сервера.
За даними документації Git, розподілена архітектура робить систему стійкою до збоїв: якщо сервер вийде з ладу, будь-який локальний репозиторій може стати джерелом для відновлення повної історії проекту.
Локальний репозиторій — це копія проекту на комп’ютері розробника. Він містить усю історію комітів, гілок і тегів і дозволяє виконувати операції commit, branch, merge і rebase без підключення до мережі.
Віддалений репозиторій — розміщується на сервері і служить точкою синхронізації для всіх учасників команди. Розробники надсилають свої зміни командою git push і забирають чужі командою git pull.
Зв’язок між локальним і віддаленим репозиторієм налаштовується через remote origin — URL сервера, який зберігається в конфігурації Git. Один локальний репозиторій може бути пов’язаний з кількома віддаленими, що корисно при роботі з форками.
Основна перевага такої моделі — розробник може працювати над кодом в офлайн-режимі, а синхронізувати зміни тільки при готовності надіслати результат.
| Характеристика | Локальний | Віддалений |
|---|---|---|
| Розташування | На комп’ютері розробника | На сервері (GitHub, GitLab) |
| Доступ без мережі | Повний доступ до всіх операцій | Недоступний без підключення |
| Синхронізація | Push/Pull з віддаленим | Приймає push від локальних |
| Резервне копіювання | Не захищений від втрати даних | Зберігається на сервері з бекапами |
Модель зберігання Git принципово відрізняється від інших систем контролю версій. Замість зберігання списку змін (дельт) між версіями, Git зберігає повні знімки всіх файлів проекту на момент кожного коміту.
Кожен об’єкт у репозиторії ідентифікується унікальним SHA-1 хешем довжиною 40 символів. Якщо вміст файлу не змінився між комітами, Git не створює новий об’єкт, а перевикористовує існуючий — це економить місце.
Git використовує чотири типи об’єктів: blob (вміст файлу), tree (структура директорії), commit (знімок з метаданими) і tag (іменоване посилання на коміт). Всі об’єкти зберігаються в папці .git/objects.
За даними Git Internals, об’єктна модель Git забезпечує цілісність даних: будь-яка зміна вмісту файлу призводить до нового хешу, що робить неможливою непомітну зміну історії.
Папка .git — це серце репозиторію. Без неї Git не може відстежувати зміни, а звичайна директорія залишається просто набором файлів. Розуміння структури цієї папки допомагає діагностувати проблеми з репозиторієм.
Файл HEAD заслуговує особливої уваги. У нормальному стані він містить символічне посилання на гілку, наприклад ref: refs/heads/main. При стані detached HEAD він вказує безпосередньо на коміт — це означає, що нові коміти не будуть прив’язані до жодної гілки.
Робота з Git-репозиторієм включає набір базових операцій, які розробник виконує щодня. Кожна операція змінює стан репозиторію, додаючи нові об’єкти або переміщуючи посилання.
Операції push і pull — єдині, які потребують підключення до віддаленого сервера. Всі інші операції виконуються повністю локально, що забезпечує високу швидкість роботи навіть при великому обсязі історії.
Кожен файл у репозиторії проходить через чотири стани: untracked (не відстежується), modified (змінений), staged (підготовлений) і committed (закомічений). Git відстежує тільки файли, які були явно додані через git add або вже знаходяться в історії комітів.
Розуміння цієї моделі — ключ до ефективної роботи з Git. Розробник може вибірково готувати до коміту тільки частину змінених файлів, створюючи логічно завершені коміти зі зрозумілим описом.
Віддалені репозиторії зазвичай розміщуються на спеціалізованих платформах, які надають веб-інтерфейс, систему управління доступом та додаткові інструменти для спільної розробки.
Вибір платформи залежить від розміру команди, вимог до приватності та необхідних інтеграцій. Для мобільної розробки часто обирають GitHub через широку підтримку спільноти та інтеграцію з інструментами CI/CD для iOS і Android.
Розглянемо практичний сценарій: розробник клонує існуючий репозиторій, створює нову гілку, вносить зміни та надсилає їх на сервер. Кожна команда демонструє роботу з різними компонентами репозиторію.
# Клонування віддаленого репозиторію
git clone https://github.com/user/mobile-app.git
# Перехід у директорію проекту
cd mobile-app
# Створення нової гілки feature і переключення на неї
git checkout -b feature/auth
# Перевірка статусу змінених файлів
git status
# Додавання всіх змін до staging area
git add .
# Створення коміту з описом
git commit -m "Add authentication module"
# Надсилання змін до віддаленого репозиторію
git push origin feature/auth
Команда git status — одна з найкорисніших у повсякденній роботі. Вона показує, які файли змінено, які підготовлено до коміту, а які взагалі не відстежуються Git.
Для аналізу історії репозиторію використовується команда git log з різними прапорцями форматування. Вона відображає хронологію комітів, їхніх авторів, дати та SHA-1 ідентифікатори.
# Перегляд історії з візуалізацією графа гілок
git log --oneline --graph --all
# Перегляд змін у конкретному коміті
git show a1b2c3d
# Порівняння поточного стану з останнім комітом
git diff HEAD
# Перегляд історії конкретного файлу
git log --follow src/MainActivity.kt
Прапорець --graph відображає ASCII-граф розгалужень, що особливо корисно в репозиторіях з активною роботою в кількох гілках. Для мобільних проектів з частими релізами візуальний граф допомагає швидко оцінити структуру розробки.
Часті запитання
Репозиторій — це технічне сховище коду з історією змін. Проект — більш широке поняття, яке включає репозиторій, систему управління завданнями, документацію та процеси розробки. Один проект може містити кілька репозиторіїв.
Створіть новий репозиторій через веб-інтерфейс GitHub, натиснувши кнопку New. Вкажіть ім’я, опис і рівень доступу. Потім клонуйте репозиторій на локальну машину або зв’яжіть з існуючим локальним репозиторієм через git remote add origin.
Якщо віддалений репозиторій видалено з сервера, але хоча б один розробник має локальну копію, репозиторій можна відновити. Достатньо створити новий віддалений репозиторій і виконати git push --force з локальної копії з усією історією.
Форк — це копія чужого репозиторію на вашому обліковому записі. Ви отримуєте повну копію історії та можете вносити будь-які зміни без впливу на оригінал. Форки використовуються для участі в open-source проектах через Pull Request.
Використовуйте git gc для стиснення об’єктів і видалення недосяжних даних. Видаліть великі файли з історії через git filter-branch або git filter-repo. Для проектів з бінарними файлами розгляньте Git LFS (Large File Storage).
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також