Синхронізація та багато репозиторіїв

Фетч, пул і пуш

Пул

Три режими, які обираються з випадного списку: типовий, лише перемотування вперед або ребейз. Локальні зміни автоматично ховаються в стеш і повертаються назад навколо пулу, тож брудне робоче дерево вас не блокує.

Гілка, яка нічого не відстежує

git pull — це фетч, а за ним злиття, і злиттю потрібно знати, у що зливати: upstream гілки. У гілки, створеної локально або взятої без відстеження, його немає. Фетч усе одно проходить, повз пролітає довгий список оновлених рефів origin/*, а потім git зупиняється на "There is no tracking information for the current branch". Нічого не було отримано і нічого не зламалося: другій половині просто не було куди зливати.

Gitcito читає цю помилку й пропонує ремонт кнопкою, обираючи яку — за тим, чи віддалений уже має цю гілку:

Вона є на віддаленому Пов’язати й отримати — призначає upstream <віддалений>/<гілка> і потім виконує той pull, який ви просили. Скасовно через ⌘Z, що знову знімає відстеження.
Її там ще немає Надіслати гілку — звичайний push, який попутно призначає upstream.

Пропонується origin, якщо він є, інакше перший віддалений зі списку. Який із випадків ваш, читається з рефів відстеження, а не з мережі, — тож відповідь відображає щойно виконаний фетч.

Пуш

Примусовий пуш завжди використовує --force-with-lease — безпечний варіант, який відмовляється працювати, якщо віддалений репозиторій зрушив відтоді, як ви востаннє на нього дивилися. Примусовий пуш захищеної гілки просить підтвердження (список — у шестерні налаштувань репозиторію).

Підтвердження, якого захищена гілка вимагає перед примусовим пушем

Немає ремоутів

Пуш, пул і фетч потребують куди йти. Репозиторій без жодного — свіжий git init, клон, у якого прибрали origin — раніше лишав ці кнопки без дії або вважав порожній фетч успіхом. Тепер вони відкривають Додати віддалений репозиторій, з попередженням: вставте URL або створіть репо на хості. Додавання завершує почату дію: пуш публікує поточну гілку, пул фетчить і тоді робить пул, фетч лише фетчить.

Фоновий автофетч мовчить, коли фетчити нічого. Діалог за таймером він не відкриває.

Коли ремоутів більше ніж один

Кнопка Запушити цілиться в upstream цієї гілки. Стрілка поруч із нею пропонує ще й таке, щойно в репозиторії з’являється більш ніж один ремоут:

Запушити в один ремоут Виберіть один віддалений репозиторій — форк, дзеркало, ціль розгортання
Запушити в усі N ремоутів По одному пушу на ремоут, по черзі
Запушити всі теги в git push <remote> --tags, усі локальні теги за раз

Ті самі дві дії є й у власному рядку кожного ремоута на бічній панелі — а це зазвичай саме те місце, де ви перебуваєте, коли постає це питання.

Відмова не скасовує решти. Пуш у форк і в його upstream — це рівно той випадок, коли один бік відмовляє, а другий усе одно має пройти, тож кожен ремоут звітує окремо: успіхи називаються поіменно в одному сповіщенні, а кожна невдача отримує власне, з поясненням від git.

Upstream гілки встановлює лише перший ремоут зі списку. У гілки один upstream, і останній ремоут, куди ви запушили, — не обов’язково той, за яким ви хочете, щоб вона стежила.

Обидва шляхи проходять ті самі перевірки, що й звичайний пуш, — підтвердження захищеної гілки та сторож секретів. Публікація у два ремоути — це подвійна експозиція, а не половина обережності.

Гілки, на яких ви не стоїте

git pull рухає лише HEAD — тому більшість клієнтів вимагає спершу перемкнутися на гілку. Gitcito не вимагає: правий клік на будь-якій локальній гілці — на бічній панелі або на її значку в графі — дає Стягнути <гілку> і Надіслати <гілку>, і обидва діють саме на неї.

Стягнути <гілку> Перемотує локальне посилання до його upstream, без чекауту. Робоче дерево лишається недоторканим. Скасовується через ⌘Z — скасування повертає гілку на попереднє місце.
Надіслати <гілку> Звичайний пуш цієї гілки, з тими самими перевірками захищеної гілки та секретів, що й кнопка на панелі.

Пул недоступний для гілки, яка нічого не відстежує — немає звідки стягувати. На гілці, де ви стоїте, обидва зводяться до звичайного пулу, який оновлює й робоче дерево.

Обмеження, яке варто знати: гілка, що розійшлася зі своїм upstream, відхиляється — з повідомленням про це. Узгодити розходження означає merge або rebase, а обом потрібне робоче дерево, тож цей випадок і далі коштує чекауту. Примусове надсилання гілки, на якій ви не стоїте, пропонується, коли віддалений репозиторій відхилив пуш; шлях «стягнути й повторити» — ні, з тієї ж причини.

Фетч

У Отримати є власна кнопка на панелі інструментів, поруч із Пул. Вона отримує з усіх віддалених і чистить застарілі, тож ваші рефи origin/* і всі лічильники попереду/позаду стають актуальними — і не чіпає ні вашу гілку, ні робоче дерево. Це та кнопка, коли хочеться побачити, що зробили інші, не рухаючи власної роботи.

Є також фоновий автофетч з інтервалом, який ви задаєте (Налаштування → Загальні). Наведіть курсор на кнопку «Отримати» — вік проступить під нею, 4 хв тому, бурштиновим, якщо фетч старший за п'ятнадцять хвилин. Він ніколи не займає місця на панелі, бо відповідає на питання, яке ставлять лише тягнучись до кнопки. Читається з FETCH_HEAD, тож git fetch, запущений у терміналі, рахується нарівні із запущеним тут.

Фетч, який знайшов переписану історію, каже про це прямо: сповіщення називає гілку, а її рядок отримує маркер, що відкриває що змінилося відтоді рівно на тому коміті, на який вона вказувала раніше.

Багато репозиторіїв одночасно

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

Ремоути

Додавати, редагувати, видаляти та фетчити окремі ремоути можна з бічної панелі. Рядки гілок несуть значки присутності по кожному ремоуту, тож ви одним поглядом бачите, у яких віддалених репозиторіях є копія гілки.

Фетч, пул або пуш без ремоутів відкриває той самий діалог «Додати віддалений репозиторій», замість успішно нічого не зробити. Див. фетч, пул і пуш.

Дивіться також: Центр керування · Хостинг і пул-реквести

Покращити цей переклад на GitHub