-
1. Вступ
- 1.1 Про систему контролю версій
- 1.2 Коротка історія Git
- 1.3 Основи Git
- 1.4 Git, зазвичай, тільки додає дані
- 1.5 Три стани
- 1.6 Командний рядок
- 1.7 Інсталяція Git
- 1.8 Початкове налаштування Git
- 1.9 Отримання допомоги
- 1.10 Підсумок
-
2. Основи Git
- 2.1 Створення Git-репозиторія
- 2.2 Запис змін до репозиторія
- 2.3 Перегляд історії комітів
- 2.4 Скасування речей
- 2.5 Взаємодія з віддаленими сховищами
- 2.6 Теґування
- 2.7 Псевдоніми Git
- 2.8 Підсумок
-
3. Галуження в git
- 3.1 Гілки у кількох словах
- 3.2 Основи галуження та зливання
- 3.3 Управління гілками
- 3.4 Процеси роботи з гілками
- 3.5 Віддалені гілки
- 3.6 Перебазовування
- 3.7 Підсумок
-
4. Git на сервері
- 4.1 Протоколи
- 4.2 Отримання Git на сервері
- 4.3 Генерація вашого публічного ключа SSH
- 4.4 Налаштування Серверу
- 4.5 Демон Git
- 4.6 Розумний HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Варіанти стороннього хостингу
- 4.10 Підсумок
-
5. Розподілений Git
-
6. GitHub
-
7. Інструменти Git
- 7.1 Вибір ревізій
- 7.2 Інтерактивне індексування
- 7.3 Ховання та чищення
- 7.4 Підписання праці
- 7.5 Пошук
- 7.6 Переписування історії
- 7.7 Усвідомлення скидання (reset)
- 7.8 Складне злиття
- 7.9 Rerere
- 7.10 Зневадження з Git
- 7.11 Підмодулі
- 7.12 Пакування
- 7.13 Заміна
- 7.14 Збереження посвідчення (credential)
- 7.15 Підсумок
-
8. Налаштування Git
-
9. Git and Other Systems
- 9.1 Git як клієнт
- 9.2 Міграція на Git
- 9.3 Підсумок
-
10. Git зсередини
- 10.1 Кухонні та парадні команди
- 10.2 Об’єкти Git
- 10.3 Посилання Git
- 10.4 Файли пакунки
- 10.5 Специфікація посилань (refspec)
- 10.6 Протоколи передачі
- 10.7 Супроводження та відновлення даних
- 10.8 Змінні середовища
- 10.9 Підсумок
-
A1. Додаток A: Git в інших середовищах
- A1.1 Графічні інтерфейси
- A1.2 Git у Visual Studio
- A1.3 Git в Eclipse
- A1.4 Git у Bash
- A1.5 Git у Zsh
- A1.6 Git у Powershell
- A1.7 Підсумок
-
A2. Додаток B: Вбудовування Git у ваші застосунки
- A2.1 Git з командного рядка
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Додаток C: Команди Git
- A3.1 Налаштування та конфігурація
- A3.2 Отримання та створення проектів
- A3.3 Базове збереження відбитків
- A3.4 Галуження та зливання
- A3.5 Поширення й оновлення проектів
- A3.6 Огляд та порівняння
- A3.7 Зневаджування
- A3.8 Латання (patching)
- A3.9 Електронна пошта
- A3.10 Зовнішні системи
- A3.11 Адміністрування
- A3.12 Кухонні команди
2.5 Основи Git - Взаємодія з віддаленими сховищами
Взаємодія з віддаленими сховищами
Задля співпраці з будь-яким проєктом Git, вам необхідно знати, як керувати віддаленими сховищами.
Віддалені сховища — це версії вашого проєкту, що розташовані в Інтернеті, або десь у мережі.
Їх може бути декілька, кожне зазвичай або тільки для читання, або для читання та змін.
Співпраця з іншими вимагає керування цими віддаленими сховищами, надсилання (pushing
) та стягування (pulling
) даних до та з них, коли ви хочете зробити внесок.
Керування віддаленими сховищами потребує знань про додавання віддалених сховищ, вилучення сховищ, що більше не потрібні, керування різноманітними віддаленими гілками та визначення стежити за ними чи ні, і багато іншого.
У цій секції, ми пройдемо ці вміння керування віддаленими сховищами.
Зауваження
|
Віддалені сховища можуть розташовуватися на вашій локальній машині.
Цілком можливо, що ви працюватимете з |
Дивимось на ваші сховища
Щоб побачити, які віддалені сервера ви налаштували, ви можете виконати команду git remote
.
Вона виводить список коротких імен кожного віддаленого сховища, яке ви задали.
Якщо ви отримали своє сховище клонуванням, ви маєте побачити хоча б origin
— таке ім’я Git дає серверу, з якого ви зробили клон:
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin
Ви також можете дати опцію -v
, яка покаже вам посилання, які Git зберігає та використовує при читанні та записі до цього сховища:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
Якщо у вас більш ніж одне віддалене сховище, ця команда описує їх усі. Наприклад, сховище з декількома віддаленими сховищами для роботи з багатьма співробітниками може виглядати так.
$ cd grit
$ git remote -v
bakkdoor https://github.com/bakkdoor/grit (fetch)
bakkdoor https://github.com/bakkdoor/grit (push)
cho45 https://github.com/cho45/grit (fetch)
cho45 https://github.com/cho45/grit (push)
defunkt https://github.com/defunkt/grit (fetch)
defunkt https://github.com/defunkt/grit (push)
koke git://github.com/koke/grit.git (fetch)
koke git://github.com/koke/grit.git (push)
origin git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)
Це означає, що ми можемо отримувати (pull
) внески з будь-якого з цих користувачів доволі легко.
Ми також можемо мати дозвіл на надсилання змін до якихось з них, хоч ми й не можемо цього тут визначити.
Завважте, що ці сховища використовують різноманітні протоколи. Ми більше про це поговоримо в Отримання Git на сервері.
Додавання віддалених сховищ
Ми згадували і навіть продемонстрували, як команда git clone
неявно додає віддалене сховище origin
.
Тут розкажемо як додати нове віддалене сховище явно.
Щоб додати нове віддалене Git сховище під заданим ім’ям, на яке ви можете легко посилатись, виконайте git remote add <ім’я> <посилання>
:
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
Тепер ви можете використати рядок pb
в командному рядку замість повного посилання.
Наприклад, якщо ви хочете здобути (fetch
) усю інформацію, яке є в Пола, проте її нема у вашому сховищі, ви можете виконати git fetch pb
:
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
Гілка master
Пола тепер доступна локально як pb/master
— ви можете злити її з однією з ваших гілок, або зробити з неї локальну гілку, якщо хочете оглянути її.
(Ми розповімо що таке гілки та як ними користуватися набагато докладніше в Галуження в git.)
Здобуття (fetching
) та стягування (pulling
) з ваших віддалених сховищ
Як ви щойно побачили, щоб отримати дані з ваших віддалених проєктів, ви можете виконати:
$ git fetch <remote>
Ця команда заходить на віддалений проєкт та забирає звідти усі дані, котрих у вас досі нема. Після цього, у вас будуть посилання на всі гілки з того сховища, які ви можете зливати або оглядати в будь-який час.
Якщо ви зробили клон сховища, команда автоматично додає це віддалене сховище під ім’ям `origin''.
Отже, `git fetch origin
здобуває будь-яку нову працю, що її виклали на той сервер після того, як ви зробили його клон (або востаннє отримували зміни з нього).
Важливо зауважити, що команда git fetch
лише завантажує дані до вашого локального сховища — вона автоматично не зливає їх з вашою роботою, та не змінює вашу поточну працю.
Вам буде потрібно вручну її злити, коли ви будете готові.
Якщо ваша поточна гілка налаштована стежити за віддаленою гілкою (докладніше в наступній секції та Галуження в git), ви можете виконати команду git pull
щоб автоматично отримати зміни та злити віддалену гілку до вашої поточної гілки.
Це може бути легшим та зручнішим методом для вас. Та команда git clone
автоматично налаштовує вашу локальну гілку master
стежити за віддаленою гілкою master
(хоча вона може називатись і по іншому) на віддаленому сервері, з якого ви зробили клон.
Виконання git pull
зазвичай здобуває дані з серверу, з якого ви зробили клон, та намагається злити їх з кодом, над яким ви зараз працюєте.
Зауваження
|
Починаючи з версії Git 2.27 і вище, Якщо ви потребуєте типову поведінку від Git (перемотання, якщо можливе, або ж створення коміту злиття), виконайте команду:
Якщо ви бажаєте перебазовувати, коли стягуєте зміни:
|
Надсилання змін до ваших віддалених сховищ
Коли ви довели свій проєкт до стану, що хочете ним поділитись, вам треба надіслати (push
) ваші зміни нагору (upstream
).
Це робиться простою командою: git push <назва сховища> <назва гілки>
.
Якщо ви бажаєте викласти свою гілку master
до вашого серверу origin
(клонування зазвичай налаштовує обидва імені для вас автоматично), ви можете виконати наступне для надсилання всіх зроблених комітів до сервера:
$ git push origin master
Ця команда спрацює тільки в разі, якщо ви зробили клон з серверу, до якого у вас є доступ на запис, та ніхто не оновлював його після цього. Якщо хтось інший зробив клон та надіслав щось назад перед вами, вашій спробі буде слушно відмовлено. Вам доведеться спершу отримати їхню працю й вбудувати її до вашої до того, як вам дозволять надіслати свої зміни. Докладніше про надсилання змін до віддалених серверів у Галуження в git.
Оглядання віддаленого сховища
Якщо ви бажаєте більше дізнатись про окреме віддалене сховище, ви можете використати команду git remote show <назва сховища>
.
Якщо ви виконаєте цю команду з окремим ім’ям, наприклад origin
, ви отримаєте щось на кшталт:
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Вона виводить посилання для віддаленого сховища, а також інформацію про стеження за гілками.
Команда ґречно розповідає вам, що якщо ви на гілці master
та виконаєте команду git pull
, вона автоматично зіллє гілку master
з віддаленою після того, як отримає всі дані з віддаленого сховища.
Також видано список усіх віддалених посилань, які були забрані.
Ви напевно зустрінете такий простий приклад.
Втім, коли ви почнете працювати з Git інтенсивніше, ви можете побачити набагато більше інформації від git remote show
:
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)
Ця команда показує, до яких гілок автоматично надсилаються ваші зміни, коли ви виконуєте git push
, доки перебуваєте на певній гілці.
Вона також показує, яких віддалених гілок з серверу у вас нема, які віддалені гілки, що у вас є, були вилучені з серверу, і декілька локальних гілок, що можуть автоматично зливатися з віддаленими гілками, за якими вони стежать, коли ви виконуєте git pull
.
Перейменування та вилучення віддалених сховищ
Ви можете виконати git remote rename
, щоб перейменувати віддалене сховище.
Наприклад, щоб перейменувати pb
на paul
, ви можете зробити це за допомогою git remote rename
:
$ git remote rename pb paul
$ git remote
origin
paul
Варто зазначити, що це змінює і всі назви ваших віддалених гілок.
Що раніше мало назву pb/master
, тепер називається paul/master
.
Якщо ви з якоїсь причини бажаєте вилучити віддалене сховище — ви перемістили сервер або більше не використовуєте якесь дзеркало, або, можливо, хтось припинив співпрацю — ви можете використати git remote remove
або git remote rm
:
$ git remote remove paul
$ git remote
origin
Як тільки ви вилучаєте посилання на віддалене сховище в такий спосіб, усі віддалені гілки та налаштування, що пов’язані із цим віддаленим сховищем, також будуть вилучені.