1. Вступ
Уявіть, що ви пишете курсову або дипломну роботу. Почали писати — зберегли. Потім щось додали, перечитали, не сподобалося, видалили, додали нове — зберегли як "курсова-чернетка.docx". Через день внесли чимало правок, відправили на перевірку науковому керівникові, а він каже: «Попередній варіант був кращий. Поверніться до нього». І ось ви сидите, намагаєтеся згадати, що саме там змінили. Може, у вас є "курсова-фінал.docx", а потім ще "курсова-фінал-реально-фінал.docx", а потім "курсова-фінал-ТОЧНО-фінал.docx", і ви вже не памʼятаєте, де яка версія? Знайомо?
У програмуванні ця проблема підноситься до абсолюту. Ви працюєте над кодом, додаєте нову функцію, а потім розумієте, що вона крива і ламає все, що працювало до цього. Як відкотитися назад — до моменту, коли все було гаразд? Або ви працюєте над великим проєктом не самі, а з командою. Як синхронізувати зміни, щоб ніхто не перетер роботу іншого? Як зрозуміти, хто, коли і навіщо додав ту саму «геніальну» стрічку коду, яка тепер викликає баг о третій ночі?
Якщо ви коли-небудь стикалися з такими ситуаціями, то вже інтуїтивно розумієте, навіщо потрібні системи контролю версій (Version Control Systems, VCS). Це своєрідні машини часу для вашого коду. Вони дозволяють:
- записувати «знімки» стану вашого проєкту в будь-який момент часу;
- повертатися до будь-якої попередньої версії проєкту, якщо щось пішло не так;
- точно бачити, які рядки коду були додані, видалені або змінені між різними версіями;
- дозволяють кільком розробникам одночасно працювати над одним проєктом, автоматично або напівавтоматично обʼєднуючи їхні зміни;
- Вести історію: фіксувати, хто, коли і навіщо вносив ті чи інші зміни;
Одна з таких систем називається 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. Віддалений репозиторій
Це централізоване місце для зберігання вашого коду, зазвичай розміщене на таких сервісах, як GitHub, GitLab або Bitbucket. Вони забезпечують зберігання коду й є основою для спільної роботи. Віддалений репозиторій слугує точкою інтеграції для автоматизації процесів, таких як збірка, тестування та розгортання застосунків.
2. Локальний репозиторій
Локальний репозиторій — це ваша персональна копія коду, що зберігається на вашому компʼютері. У цьому репозиторії ви можете виконувати всі операції з Git (коміти, гілки, злиття) без потреби під’єднання до інтернету.
3. Робочий каталог
Робочий каталог на вашому компʼютері містить актуальні файли проєкту, над якими ви зараз працюєте. Тут ви можете бачити й змінювати файли, додавати новий функціонал або виправляти помилки.
Разом ці компоненти утворюють потужну інфраструктуру для керування вихідним кодом, даючи змогу розробникам керувати історією проєкту та ефективно співпрацювати.
5. GitHub — ваше портфоліо
GitHub — це провідна веб‑платформа для хостингу вихідного коду, що використовує систему контролю версій Git. Заснована у 2008 році, вона швидко стала одним із ключових інструментів для розробників у всьому світі.
GitHub дає змогу користувачам створювати репозиторії для керування проєктами, контролювати й відстежувати зміни в коді та співпрацювати з іншими розробниками. Для сучасного розробника профіль на GitHub — важлива частина портфоліо, яке можна показати потенційним роботодавцям.
6. Створення вашого першого репозиторію на GitHub
Крок 1. Зайдіть на https://github.com і зареєструйтеся.
Крок 2. Натисніть кнопку New repository для створення нового репозиторію.
Крок 3. Вкажіть параметри для репозиторію:
- Імʼя репозиторію: вигадайте осмислену назву.
- Публічний чи приватний: для навчальних проєктів краще обрати «Public», щоб його могли бачити інші.
- Add a README file: обовʼязково поставте цю позначку. README — це «обличчя» вашого проєкту.
- Add .gitignore: натисніть на розкривний список і виберіть шаблон для мови програмування.
- Choose a license: можна пропустити.
- Натисніть
Create repository.
Крок 4. Вітаємо, ваш перший віддалений репозиторій створено!
7. Встановлення та налаштування Git
Хоч основи Git можна вивчати через консольні команди (як показано у відео), у щоденній роботі 99 % розробників користуються зручними інструментами, вбудованими в середовище розробки. Наша мета — навчити вас працювати так, як це роблять профі.
Інтерфейс для роботи з Git у всіх сучасних IDE від JetBrains — чи то IntelliJ IDEA для Java/Kotlin, чи то Rider для C#, чи то PyCharm для Python — майже ідентичний. Це означає, що навчившись працювати з Git в одному середовищі, ви зможете легко застосовувати ці навички в будь‑якому іншому. Тому ми будемо використовувати IntelliJ IDEA як універсальний приклад. Усе, що побачите тут, виглядатиме й працюватиме так само у вашій улюбленій IDE.
Щоб працювати з Git на вашому компʼютері, спершу потрібно його встановити. Якщо ви користуєтеся IntelliJ IDEA, вона, швидше за все, запропонує встановити Git автоматично, якщо його не знайдено в системі. Радимо погодитися — це найпростіший шлях.
Закрийте поточний проєкт, вибравши File > Close Project, і натисніть Clone Repository.
Якщо ж хочете встановити Git вручну, скористайтеся офіційним сайтом: https://git-scm.com/downloads.
8. Трохи історії: main vs master
Раніше гілка в Git за замовчуванням називалася master. Проте у 2020 році спільнота розробників і найбільші платформи, зокрема GitHub, перейшли на використання більш нейтрального терміна — main.
Це важливо знати, адже у деяких старих статтях або проєктах ви досі можете зустріти згадку гілки master. У наших лекціях і в сучасних проєктах основною гілкою завжди буде main.
Детальніше про перехід на main можна дізнатися за такими посиланнями:
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ