Як я можу зберегти свою вилку синхронізовано, не додаючи окремий пульт?


302

Припустимо, someone/foobarна GitHub є сховище , до якого я відправив me/foobar.

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

Мета:

  • git pull отримати з батьківського сховища
  • git push щоб надіслати все на мою виделку

26
Дивовижна відповідь від @Olufemi, здається, робить те, що ви хочете, за винятком того, що, як зазначає ChristianGosch у коментарі, ви закінчуєте "комісію злиття" вгорі своєї гілки, і "нічого для порівняння" не з’явиться. Це здається неприйнятним для багатьох проектів, для яких ви хочете зробити гілки, щоб вони витягувались. Тож чи справді немає способу виконати цей самий основний робочий процес для розробників в github, не запускаючи команди таємних git на персональному комп’ютері? А може, я просто повинен викинути всю свою репо-репортаж та повторну вилку кожного разу, коли захочу внести внесок ??
nealmcb

Можливий дублікат github, оновлення forked project
mpromonet



@nealmcb Чи не уникнути проблеми із "об'єднанням злиття" у верхній частині вашої гілки, якщо ви перезавантажитеся?
Марко

Відповіді:


586

Відкрийте роздвоєний сховище Git мені / foobar .

Клацніть на Порівняти :

Ось зразкове зображення сторінки

Ви отримаєте сповіщення:

Нема з чим порівняти.
хтось: майстер знайомиться з усіма зобов'язаннями від мене: майстер . Спробуйте переключити базу для порівняння.

Натисніть на перемикання бази на цій сторінці:

Ось приклад на сторінці

Тоді ви зможете побачити всі зобов’язання, зроблені комусь / foobar після дня, коли ви відправили його.

Клацніть на Створити запит на потяг :

Ось зразок сторінки

Дайте назву запиту на витяг, а можливо, опис та натисніть Створити запит на тягу .

На наступній сторінці прокрутіть до нижньої частини сторінки та натисніть Об’єднати запит на потяг та підтвердити об'єднання .

Ваше сховище Git мені / foobar буде оновлено.

Редагувати: тут показані параметри відновлення:

введіть тут опис зображення


50
Це заплутано, тому що при перемиканні базового github викидає вас на сторінку для оригінального репо, тому здається, що ви відкриваєте запит на витягування у вищій вилці. Але це повністю працює.
Едуардо

8
Для того, щоб уникнути заплутаної ситуації згадка вище, було б краще , натисніть на Editкнопку і вручну ввести base forkна me/foobarі head forkна someone/foobar. Таким чином це набагато зрозуміло
макемери

26
Ще одне: Це добре працює, якщо ви це робили не раніше, але згодом є "виконувати злиття" на вершині вашої історії виконання комісій. Таким чином, "нічого для порівняння" не з’явиться. Замість цього потрібно скористатися кнопкою "Редагувати" та вручну обмінятися базою та виделкою, щоб це працювало.
Крістіан Гош

26
Чи немає способу позбутися цього смішного злиття?
кумархарш

17
@kumar_harsh з вересня 2016 року , тепер існує опція "перезавантажити та об'єднати" для запитів на витягування, що дозволяє уникнути комісії злиття.
waldyrious

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

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

Редагувати:
насправді ви можете git pull git@github.com:me/foobar , що видаляє застереження.
Вибір за вами, про те, що простіше запам'ятати.


8

Я використовував досить простий метод, використовуючи веб-інтерфейс GitHub для цього:

  1. Відкрийте оригінальний сховище Git (а не роздвоєне сховище Git me/foobar)
  2. Перейдіть до папки src та відкрийте файл, який потрібно змінити
  3. Клацніть на значку пера. Він автоматично створить мітку у вашому особистому вилці під назвою "patch-1" на основі поточної версії головного сховища: Введіть тут опис зображення
  4. Насолоджуйтесь! Введіть тут опис зображення

3
Спробувавши це, в основному відкривається редактор файлу в оригінальному git repo. У мене немає привілей на запис (за задумом) в оригінальний git repo. Здається, для цього методу ви повинні змінити файл, інакше немає способу "зберегти" файл. Без збереження файлу я не міг отримати ваш еквівалент гілки "patch-1", який відобразився б у моєму роздрібному сховищі. Що я тут пропускаю?
Електро-Зайчик

5

Додаток "Потягніть" - це рішення автоматичного налаштування та забуття. Він синхронізує гілку вашого вилка за замовчуванням із сховищем вище.

Зайдіть за URL-адресою, натисніть зелену кнопку "Встановити" та виберіть сховища, де потрібно включити автоматичну синхронізацію.

Гілка оновлюється один раз на годину безпосередньо на GitHub, на локальній машині потрібно витягнути головну гілку, щоб переконатися, що ваша локальна копія синхронізується.

Також відповів у https://stackoverflow.com/a/58965171/946850 .


1

Іншим варіантом є використання Update from upstreamRepoName/masterкнопки в GitHub для Mac (і я припускаю, що GitHub для Windows).

Введіть тут опис зображення


TIL: що є додатки для GitHub за межами веб-інтерфейсу :-) [і шкода, що досвід через них не уніфікований]
Tom Goodfellow,

Я цього не бачу в Windows
Денис

1
@Denis це їх стара програма. Я не впевнений, що їх нове додаток має.
Стів Мозер

Ага. Це працювало в "GitHub Desktop" (для Mac, не впевнений у Windows).
michaelok

0

Я не знаю, як це можна зробити без додавання ще одного дистанційного, однак я завжди додаю репо, від якого я розщедрився як upstreamвіддалений, щоб я міг просто зробити:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

Це синхронізує всі гілки, включаючи створення нових (видаліть refs/heads/лише оновлення існуючих гілок). Якщо будь-яка з ваших гілок розбіглась, вона призведе до помилки для цієї гілки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.