1. Проблема без контролю версій: чому просте копіювання файлів — погана ідея
Коли ви вчитеся програмувати, здається, що головне — щоб код працював. Але досить швидко виявляється інше: код змінюється частіше, ніж залишається стабільним. Ви виправляєте баг, додаєте функцію, передумуєте, повертаєтеся до попередньої версії, а потім знову щось змінюєте…
Почнімо з життєвої ситуації. Уявіть, що ви працюєте над своїм Swift-проєктом. Усе йде добре, доки не настає момент експериментів. Ви вирішуєте щось змінити, але боїтеся зламати робочу версію. Що робити? Звісно, копіювати проєкт!
У результаті на вашому диску зʼявляються такі шедеври:
MyProject/
├── main.swift
├── main_backup.swift
├── main_final.swift
├── main_final2.swift
├── main_really_final.swift
├── main_really1_really_final2.swift
Знайомо? А тепер уявіть, що до проєкту долучився ще один друг. Він теж любить копіювати файли — тільки по-своєму. Як зрозуміти, де найсвіжіша й робоча версія? Як дізнатися, хто що змінив? Як повернути все назад, якщо експеримент не вдався?
Без контролю версій:
- Легко втратити або переплутати робочий код.
- Неможливо «відкотитися» до старої версії.
- Складно працювати вдвох або втрьох.
- Суцільний хаос і страх перед експериментами.
Саме ці проблеми розвʼязують системи контролю версій — такі як Git.
Відео
Перегляньте лекцію від ментора JavaRush Університету. Відео дасть вам міцну базу для роботи з Git через термінал — так ви краще зрозумієте механіку процесів, прихованих за кнопками IDE.
Відео складається з двох частин:
- Спершу ви розберете основи роботи з Git через термінал. Цей фундаментальний підхід допоможе вам зрозуміти, що відбувається «під капотом» системи.
- Потім ви перейдете до практики в IntelliJ IDEA й навчитеся виконувати ті самі операції за допомогою зручного графічного інтерфейсу — саме так щодня працюють професіонали.
У відео ментор використовує приклади на Java. Не переймайтеся! Git — технологія універсальна, і принципи роботи з версіями абсолютно однакові для Swift, Java чи Python. Зосередьтеся на командах Git і логіці їхньої роботи, а не на коді проєкту.
2. Навіщо розробнику потрібен Git?
Git — це потужна система керування версіями, яку використовують для відстеження змін у вихідному коді під час розробки програмного забезпечення. Вона дає змогу розробникам зберігати різні версії файлів і координувати роботу кількох людей над спільним проєктом.
Основні поняття Git:
Репозиторій
Репозиторій, або «репо», — це місце, де зберігається вся історія проєкту, включно з усіма змінами та версіями файлів.
Коміти
commit — це збережений стан проєкту. Кожен коміт у Git містить інформацію про те, які зміни внесено в проєкт, хто їх вніс і коли. Коміти утворюють історію проєкту та дають змогу повернутися до будь-якої попередньої версії.
gitGraph
commit id: "1"
commit id: "2"
commit id: "3"
commit id: "4"
commit id: "5"
commit id: "6"
Кожен коміт — це «знімок» проєкту, який іде після попереднього, формуючи послідовну історію змін.
Гілки
branch — це незалежна лінія розробки. За замовчуванням Git створює гілку main. Ви можете створювати нові гілки для розробки нових функцій або виправлень, а потім обʼєднувати їх назад в основну гілку.
gitGraph
commit id: "1"
commit id: "2"
branch develop
commit id: "3"
commit id: "4"
commit id: "5"
checkout main
commit id: "6"
commit id: "7"
merge develop
commit id: "8"
commit id: "9"
Від основної гілки main відгалужується гілка develop для паралельної розробки. Після завершення роботи зміни з develop зливаються назад у main.
3. Основні команди Git (те, що під капотом)
Нижче наведено список основних команд Git для роботи в терміналі. Важливо розуміти, на чому ґрунтуються всі операції. Втім, ми зосередимося на GUI-підході й навчимося виконувати всі ці дії за допомогою зручного графічного інтерфейсу IntelliJ IDEA. Сприймайте ці команди як те, що відбувається «під капотом».
| Команда | Опис |
|---|---|
git init |
Ініціалізує новий Git-репозиторій у поточному каталозі. |
git clone |
Клонує репозиторій з URL у новий каталог. |
git add |
Додає файли до індексу для наступного коміту. |
git commit |
Фіксує підготовлені зміни в репозиторії. |
git push |
Надсилає зміни з локального репозиторію до віддаленого. |
git pull |
Оновлює поточну гілку до останньої версії з віддаленого репозиторію. |
git branch |
Показує, створює або видаляє гілки. |
git merge |
Зливає зміни вказаної гілки з поточною гілкою. |
Ці команди — основні інструменти роботи з Git. Вони дають змогу керувати змінами коду, гілками та злиттями в проєктах будь-якого розміру.
sequenceDiagram
participant Робочий каталог
participant Область індексації (Staging)
participant Локальний репозиторій
participant Віддалений репозиторій
Робочий каталог ->> Область індексації (Staging): git add (Підготувати)
Область індексації (Staging) ->> Локальний репозиторій: git commit (Зберегти локально)
Локальний репозиторій ->> Віддалений репозиторій: git push (Надіслати на сервер)
Віддалений репозиторій ->> Робочий каталог: git pull (Завантажити оновлення)
4. Чотири стани (місця зберігання) коду
Коли ви працюєте із системою контролю версій, код логічно проходить через чотири стани:
1. Робочий каталог (Working Directory)
Робочий каталог на вашому компʼютері містить актуальні файли проєкту, над якими ви зараз працюєте. Це місце, де ви можете бачити й змінювати файли, писати код, додавати нові можливості або виправляти помилки.
2. Область індексації (Staging Area)
Це проміжна зона між вашим робочим каталогом та локальним репозиторієм. У термінах графічного інтерфейсу IDE (GUI) — це ті самі прапорці, які ви ставите навпроти змінених файлів перед тим, як натиснути кнопку Commit. Ви самі обираєте, які саме файли та зміни готові увійти до наступного «знімка» історії.
3. Локальний репозиторій (Local Repository)
Локальний репозиторій — це ваша персональна копія історії коду, що зберігається на вашому компʼютері. У цьому репозиторії ви можете виконувати всі операції з Git (коміти, розгалуження, злиття) без потреби підключення до інтернету.
4. Віддалений репозиторій (Remote Repository)
Це централізоване місце для зберігання вашого коду, зазвичай розміщене на таких сервісах, як GitHub, GitLab або Bitbucket. Вони забезпечують надійне зберігання коду на серверах і є основою для спільної роботи в команді.
5. GitHub — ваше портфоліо
Важливо чітко розрізняти два поняття: Git і GitHub. Git — це програма, яка працює локально на вашому компʼютері, навіть без інтернету, і відстежує версії файлів. А GitHub — це хмарний сервіс, де зберігаються віддалені копії ваших Git-репозиторіїв.
GitHub — це провідна вебплатформа для розміщення вихідного коду, що використовує систему контролю версій Git. Заснована 2008 року, вона швидко стала одним із ключових інструментів для розробників у всьому світі.
GitHub дає змогу користувачам створювати репозиторії для керування проєктами, відстежувати зміни в коді та співпрацювати з іншими розробниками. Для сучасного розробника профіль на GitHub є важливою частиною портфоліо, яке можна показати потенційним роботодавцям.
6. Створення вашого першого репозиторію на GitHub
Крок 1. Зайдіть на https://github.com і зареєструйтеся.
Крок 2. Натисніть на кнопку New repository для створення нового репозиторію.
Крок 3. Укажіть параметри для репозиторію:
- Імʼя репозиторію: придумайте змістовне імʼя.
- Публічний чи приватний: для навчальних проєктів краще обрати «Public», щоб репозиторій могли бачити інші.
- Add a README file: обовʼязково поставте цю позначку. README — це «обличчя» вашого проєкту.
- Add .gitignore: натисніть на спадний список і виберіть шаблон Swift. Це критично важливо: компілятор Swift і менеджер пакетів (Swift Package Manager) створюють багато тимчасових файлів, кешу та бінарних файлів, наприклад у прихованому каталозі
.build/, які не мають засмічувати ваш репозиторій. Шаблон допоможе Git автоматично їх ігнорувати. - Choose a license: можна пропустити.
- Натисніть
Create repository.
Крок 4. Вітаємо, ваш перший віддалений репозиторій створено!
7. Встановлення та налаштування Git
Хоча основи Git можна вивчати через консольні команди, як показано у відео, у щоденній роботі 99 % розробників користуються саме зручними інструментами, вбудованими в середовище розробки. Наша мета — навчити вас працювати так, як це роблять професіонали.
Інтерфейс роботи з Git в усіх сучасних IDE від JetBrains — чи то CLion для Swift, IntelliJ IDEA для Java/Kotlin, чи PyCharm для Python — практично однаковий. Це означає, що, навчившись працювати з Git в одному середовищі, ви зможете легко застосовувати ці навички в будь-якому іншому.
У цьому курсі для демонстрації прикладів ми використовуватимемо знімки екрана з IntelliJ IDEA. Не хвилюйтеся: у CLion усі кнопки, меню та панелі розташовані саме в тих самих місцях.
Щоб працювати з Git на вашому компʼютері, його спершу потрібно встановити. Якщо ви користуєтеся IDE від JetBrains, вона, найімовірніше, запропонує встановити Git автоматично, якщо не знайде його в системі. Ми рекомендуємо погодитися з цією пропозицією — це найпростіший шлях.
Закрийте поточний проєкт, обравши у верхньому меню File | Close Project. На стартовому екрані (Welcome Screen) натисніть кнопку Clone Repository (у деяких версіях інтерфейсу вона може називатися Get from VCS).
Якщо ж ви хочете встановити його вручну, скористайтеся офіційним сайтом: https://git-scm.com/downloads.
Важливий нюанс
Коли ви робитимете свій перший коміт в IDE, IntelliJ IDEA попросить вас представитися — вказати імʼя користувача та адресу електронної пошти. Вкрай важливо вказати саме ту адресу електронної пошти, на яку ви зареєстрували свій обліковий запис на GitHub.
Річ у тім, що GitHub повʼязує авторство ваших комітів із вашим профілем саме за цією адресою електронної пошти. Якщо адреси збігатимуться, поруч із вашими комітами зʼявиться ваша аватарка, а на сторінці вашого профілю почнуть зафарбовуватися ті самі заповітні «зелені квадратики» активності, які так люблять оцінювати роботодавці.
8. Трохи про історію: main vs master
Раніше стандартна гілка в Git називалася master. Однак у 2020 році спільнота розробників і найбільші платформи, зокрема GitHub, перейшли на використання більш нейтрального терміна — main.
Це важливо знати, оскільки в деяких старих статтях або проєктах ви все ще можете натрапити на згадку про гілку master. У наших лекціях і в сучасних проєктах основною гілкою завжди буде main.
Докладніше про перехід на main можна дізнатися за такими посиланнями:
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ