Віддалені репозиторії

Щоб мати можливість співпрацювати над будь-яким Git-проектом, вам потрібно знати, як керувати вашими віддаленими сховищами. Віддалені сховища - це версії вашого проекту, розміщені десь в інтернеті або мережі. Ви можете мати декілька таких сховищ, кожне з яких, як правило, доступне лише для читання або читання/запису. Керування віддаленими сховищами включає в себе вміння додавати віддалені сховища, видаляти віддалені сховища, які більше не є дійсними, керувати різними гілками і визначати їх як такі, що відстежуються чи ні, і багато іншого.

Перелік віддалених репозиторіїв

Щоб побачити, які віддалені сервери ви налаштували, ви можете виконати команду git remote. Вона покаже короткі імена кожного вказаного вами віддаленого дескриптора. Якщо ви клонували свій репозиторій, ви маєте побачити принаймні origin - ім’я за замовчуванням, яке Git дає серверу, з якого ви клонуєте:

$ git remote
origin
upstream

$ git remote -v
origin  git@github.com:edu-python-course/edu-python-course.github.io (fetch)
origin  git@github.com:edu-python-course/edu-python-course.github.io (push)
upstream        git@github.com:PonomaryovVladyslav/PythonCources.git (fetch)
upstream        git@github.com:PonomaryovVladyslav/PythonCources.git (push)

Це означає, що ми можемо досить легко отримувати внески від будь-якого з цих користувачів. Крім того, ми можемо мати дозвіл на проштовхування до одного або декількох з них.

Додавання віддалених репозиторіїв

Щоб додати новий віддалений репозиторій Git’у у вигляді короткого імені, на яке можна легко посилатися, виконайте git remote add <назва> <адреса>:

$ git remote
origin
upstream
$ git remote add personal https://github.com/shorodilov/python-course
$ git remote
origin
upstream
personal

Тепер ви можете використовувати рядок «personal» в командному рядку замість повної URL-адреси. Гілка master в «https://github.com/shorodilov/python-course» тепер доступна як personal/master, тоді як скорочена назва тієї ж гілки в origin буде – origin/master.

Отримання та витягування з віддаленого репозиторію

Щоб отримати дані з віддаленого проекту, ви можете виконати команду git fetch. Команда звернеться до цього віддаленого проекту і витягне всю інформацію з нього, якої ви ще не маєте. Після цього ви матимете посилання на всі гілки з цього віддаленого проекту, які ви можете об’єднати або переглянути у будь-який час.

$ git fetch <remote>

Якщо вашу поточну гілку налаштовано на відстеження віддаленої гілки, ви можете скористатися командою git pull для автоматичного отримання і подальшого об’єднання цієї віддаленої гілки у вашу поточну гілку. За замовчуванням, команда git clone автоматично налаштовує вашу локальну гілку master на відстеження віддаленої гілки master (або будь-якої іншої віддаленої гілки за замовчуванням).

Нове в версії 2.27: Починаючи з версії 2.27, git pull видаватиме попередження, якщо змінну pull.rebase не встановлено. Git продовжуватиме видавати попередження, доки ви не встановите змінну.

Якщо ви хочете отримати поведінку Git’а за замовчуванням (перемотування вперед, якщо можливо, інакше створіть комміт злиття): git config --global pull.rebase "false".

Якщо ви хочете перебазувати базу при витягуванні: git config --global pull.rebase "true".

Відправка до віддаленого репозиторію

Коли ваш проект знаходиться на етапі, яким ви хочете поділитися, вам потрібно перемістити його вгору за течією. Команда для цього проста: git push <віддалений> <гілка>.

$ git push origin master

Ця команда працює тільки якщо ви клонували з сервера, до якого у вас є доступ на запис, і якщо в цей час ніхто не робив поштовх. Якщо ви клонуєте одночасно з кимось іншим, і він зробить поштовх вище за течією, а потім ви, ваш поштовх буде справедливо відхилено. Вам доведеться спочатку отримати їхню роботу і включити її до своєї, перш ніж вам дозволять проштовхувати.

Переміщення нової гілки до віддаленого репозиторію

Якщо ви створили локальну гілку для якихось конкретних потреб і хочете надати до неї доступ, вам потрібно налаштувати трек для цієї гілки. Це можна зробити за допомогою git push --set-upstream origin <віддалена_гілка>. Це створить нову віддалену гілку і налаштує трек до вашої поточної локальної гілки. Для цієї команди існує комбінація клавіш: git push -u origin <віддалена_гілка>.

Перевірка віддаленого репозиторію

Якщо ви хочете побачити більше інформації про певний віддалений сервер, скористайтеся командою git remote show <remote.

$ git remote show origin
* remote origin
  Fetch URL: git@github.com:edu-python-course/edu-python-course.github.io
  Push  URL: git@github.com:edu-python-course/edu-python-course.github.io
  HEAD branch: master
  Remote branches:
    devel                                tracked
    feature/contributing                 tracked
    feature/libms                        tracked
    feature/pdf-builder                  tracked
    feature/translations                 tracked
    feature/vcs                          tracked
    gh-pages                             tracked
    master                               tracked
    refs/remotes/origin/blog-project     stale (use 'git remote prune' to remove)
    refs/remotes/origin/feature/homepage stale (use 'git remote prune' to remove)
    refs/remotes/origin/feature/patterns stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    devel                merges with remote devel
    feature/contributing merges with remote feature/contributing
    feature/intro-intl   merges with remote feature/intro-intl
    feature/libms        merges with remote feature/libms
    feature/pdf-builder  merges with remote feature/pdf-builder
    feature/translations merges with remote feature/translations
    feature/vcs          merges with remote feature/vcs
    master               merges with remote master
  Local refs configured for 'git push':
    devel                pushes to devel                (up to date)
    feature/contributing pushes to feature/contributing (up to date)
    feature/libms        pushes to feature/libms        (up to date)
    feature/pdf-builder  pushes to feature/pdf-builder  (up to date)
    feature/translations pushes to feature/translations (up to date)
    feature/vcs          pushes to feature/vcs          (fast-forwardable)
    master               pushes to master               (up to date)

Вона показує URL-адресу віддаленого сховища, а також інформацію про відстежувану гілку. Команда корисно повідомляє, що якщо ви перебуваєте на гілці master і виконаєте git pull, вона автоматично об’єднає гілку master віддаленого сховища з локальною гілкою після того, як її буде витягнуто. Також буде показано список усіх віддалених посилань, які було витягнуто.