Пошук уроків, статей та іншого контенту
Розглянете призначення віддалених репозиторіїв, типові сценарії роботи та взаємодію локального й спільного коду.
Віддалений репозиторій — це копія Git-репозиторію, доступна через мережу. Зазвичай її зберігають на сервері або спеціальному сервісі для спільної роботи.
Локальний репозиторій розташований на вашому комп’ютері. Віддалений репозиторій є спільною точкою обміну змінами між учасниками команди.
Наприклад:
розробник створює коміт у локальному репозиторії;
надсилає його до віддаленого репозиторію;
інший розробник отримує ці зміни у свою локальну копію;
кожен учасник працює зі своєю локальною копією, а віддалений репозиторій допомагає синхронізувати роботу.
Схематично це можна уявити так:
Локальний репозиторій розробника A
│
push
▼
Спільний віддалений репозиторій
▲
pull
│
Локальний репозиторій розробника BВіддалений репозиторій не замінює локальний. Коміти спочатку створюються локально, а потім за потреби надсилаються на сервер.
Віддалений репозиторій допомагає:
зберігати спільну версію проєкту;
обмінюватися змінами між розробниками;
мати резервну копію історії комітів;
переглядати код і його історію з різних комп’ютерів;
організовувати командну роботу;
перевіряти та обговорювати зміни перед їх об’єднанням.
Наприклад, без віддаленого репозиторію учасникам команди довелося б передавати файли вручну або використовувати архіви. Git зберігає не лише поточний стан файлів, а й історію змін.
Локальний репозиторій містить:
робочі файли проєкту;
коміти;
локальні гілки;
інформацію про відомі віддалені гілки.
Віддалений репозиторій містить окрему копію історії проєкту та гілок, доступну іншим учасникам команди.
Важливо розрізняти:
робочу директорію — файли, які ви зараз редагуєте;
локальний репозиторій — база даних Git із комітами;
віддалений репозиторій — репозиторій на іншому комп’ютері або сервері.
Команда git commit зберігає зміни лише в локальному репозиторії. Щоб зробити їх доступними для команди, потрібно виконати git push.
Якщо проєкт уже існує у віддаленому репозиторії, зазвичай його не створюють вручну, а клонують:
git clone https://example.com/team/project.git
cd projectКоманда git clone:
завантажує файли проєкту;
завантажує історію комітів;
створює локальний репозиторій;
налаштовує зв’язок із віддаленим репозиторієм;
створює локальну гілку для подальшої роботи.
Після клонування Git зазвичай називає віддалений репозиторій origin. Це лише коротке ім’я, а не спеціальний тип репозиторію.
Переглянути налаштовані віддалені репозиторії можна так:
git remote -vПриклад результату:
origin https://example.com/team/project.git (fetch)
origin https://example.com/team/project.git (push)Тут:
fetch — адреса, з якої Git отримує зміни;
push — адреса, на яку Git надсилає зміни;
origin — локальне ім’я віддаленого репозиторію.
Якщо локальний репозиторій уже існує, до нього можна додати віддалений репозиторій:
git remote add origin https://example.com/team/project.gitПісля цього можна перевірити налаштування:
git remote -vОдна локальна копія може мати кілька віддалених репозиторіїв. Наприклад, це може бути корисно для різних джерел коду, але в типовому командному проєкті часто достатньо одного origin.
git pushПісля редагування файлів типовий процес має такий вигляд:
git add README.md
git commit -m "Оновлено опис проєкту"
git push origin mainЦі команди виконують різні дії:
git add додає зміни до індексу;
git commit зберігає зміни в локальному репозиторії;
git push надсилає локальні коміти у віддалений репозиторій.
У команді:
git push origin mainorigin — ім’я віддаленого репозиторію;
main — гілка, до якої надсилаються коміти.
Першого разу можна встановити зв’язок між локальною та віддаленою гілками:
git push -u origin mainПараметр -u запам’ятовує відповідність між поточною локальною гілкою та origin/main. Після цього часто достатньо виконувати:
git pushНадсилати можна лише закомічені зміни. Незбережені в комітах зміни команда git push не передає.
git fetchКоманда git fetch отримує нові коміти та інформацію про гілки з віддаленого репозиторію, але не змінює ваші робочі файли:
git fetch originПісля цього локальний Git знає про нові зміни, які з’явилися у віддаленому репозиторії.
Це дає змогу спочатку переглянути ситуацію, а потім вирішити, як об’єднати зміни зі своєю роботою.
Наприклад, можна переглянути коротку історію віддаленої гілки:
git log --oneline origin/mainorigin/main — це локальне посилання на стан гілки main у віддаленому репозиторії, відомий після останнього отримання даних.
git pullКоманда git pull зазвичай виконує дві дії:
отримує нові зміни з віддаленого репозиторію;
намагається об’єднати їх із поточною локальною гілкою.
git pull origin mainУ повсякденній роботі перед початком змін часто виконують:
git pullЦе працює, якщо для поточної гілки вже налаштовано відстеження віддаленої гілки.
Типовий сценарій:
git pull
# Розробник редагує файли
git add .
git commit -m "Додано перевірку форми"
git pushПісля git pull локальна копія містить актуальніші зміни команди, а після git push власні коміти стають доступними іншим учасникам.
Розглянемо простий сценарій.
Розробник A клонує проєкт.
Створює коміт локально.
Надсилає коміт у origin.
Розробник B отримує цей коміт через git pull.
Розробник B продовжує роботу на основі оновленого коду.
Приклад послідовності команд:
# Клонування спільного проєкту
git clone https://example.com/team/project.git
cd project
# Отримання актуального стану перед роботою
git pull
# Підготовка зміненого файлу
git add src/app.js
# Створення локального коміту
git commit -m "Оновлено запуск застосунку"
# Надсилання коміту команді
git pushІнший розробник після цього виконує:
git pullта отримує новий коміт у своїй локальній копії.
push може бути відхиленоGit може не дозволити виконати push, якщо у віддаленій гілці вже є коміти, яких немає у вашій локальній гілці.
Наприклад:
ви клонували проєкт;
інший розробник уже надіслав зміни;
ви створили власний коміт на старій версії;
спробували виконати git push.
У такій ситуації Git захищає від випадкового перезапису чужої історії. Спочатку потрібно отримати зміни та об’єднати їх із власними:
git pullЯкщо об’єднання відбулося успішно, можна повторити:
git pushЯкщо Git повідомить про конфлікт, потрібно вручну розв’язати його у відповідних файлах, створити коміт із результатом об’єднання, а потім знову виконати git push.
Віддалена гілка — це гілка, яка існує у віддаленому репозиторії. У локальній копії вона зазвичай позначається як:
origin/mainЦе не окрема локальна гілка, у якій безпосередньо редагують файли. Це запис про стан гілки main у віддаленому репозиторії на момент останнього fetch, pull або іншої операції отримання даних.
Переглянути локальні та віддалені гілки можна так:
git branch --allПриклад:
* main
remotes/origin/mainЗірочка показує поточну локальну гілку.
Для простої роботи в команді можна використовувати таку послідовність:
git pull
git status
# Розробник редагує файли
git add .
git commit -m "Зрозумілий опис змін"
git pushПеред комітом корисно перевірити стан репозиторію:
git statusКоманда покаже:
змінені файли;
файли, підготовлені до коміту;
файли, які ще не додано до індексу;
поточну гілку;
інформацію про відмінності від віддаленої гілки.
Повний приклад із локальним репозиторієм:
mkdir team-project
cd team-project
git init
git remote add origin https://example.com/team/team-project.git
printf "# Team project\n" > README.md
git add README.md
git commit -m "Додано початковий README"
git branch -M main
git push -u origin mainЦей приклад:
створює директорію проєкту;
ініціалізує локальний Git-репозиторій;
додає віддалений репозиторій з іменем origin;
створює файл і коміт;
перейменовує поточну гілку на main;
надсилає гілку у віддалений репозиторій.
Для виконання прикладу адреса https://example.com/team/team-project.git має бути замінена на реальну адресу репозиторію, до якого у вас є доступ.
commit і pushgit commit зберігає зміни лише локально.
git push надсилає вже створені коміти у віддалений репозиторій.
Якщо виконати лише commit, інші учасники команди змін не побачать.
push передасть незакомічені файлиGit надсилає коміти, а не просто поточний стан робочої директорії. Перед push потрібно виконати:
git add .
git commit -m "Опис змін"
git pushЯкщо перед початком роботи не отримати зміни команди, локальна копія може бути застарілою.
Зазвичай варто починати роботу з:
git pullПеревірити назви та адреси можна командою:
git remote -vУ більшості прикладів використовується origin, але в конкретному проєкті віддалений репозиторій може мати інше ім’я.
Перед push корисно переглянути стан і останні коміти:
git status
git log --oneline -3Це допомагає переконатися, що до віддаленого репозиторію буде надіслано саме потрібний коміт.
Віддалений репозиторій — це спільна мережева копія Git-репозиторію.
Локальний репозиторій зберігає коміти на комп’ютері розробника.
git clone створює локальну копію віддаленого репозиторію.
git remote -v показує налаштовані віддалені репозиторії.
git commit зберігає зміни локально.
git push надсилає локальні коміти у віддалений репозиторій.
git fetch отримує інформацію про нові зміни без зміни робочих файлів.
git pull отримує зміни та об’єднує їх із поточною локальною гілкою.
Перед push бажано перевірити стан репозиторію та переконатися, що локальна копія актуальна.