Як оновити сховище GitHub forked?


3603

Нещодавно я відправив проект і застосував кілька виправлень. Потім я створив запит на витяг, який потім був прийнятий.

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

Як я можу отримати цю зміну у своєму вилці? Чи потрібно видаляти та відновлювати мою вилку, коли я можу внести додаткові зміни? Або є кнопка оновлення?


120
Це також можна зробити з інтерфейсу github. Я хотів би подякувати [цьому іншому плакату] [1]. [1]: stackoverflow.com/a/21131381/728141
Майк Шролл

2
Ще одна хороша публікація в цьому блозі - Оновлення вилки GitHub
Arup Rakshit

3
Знайшов в GitHub статей довідки: help.github.com/articles/syncing-a-fork
Pranav


Ось демонстрація відео, яка робить це за допомогою двох облікових записів github youtube.com/watch?v=kpE0gTX4ycE
життєвий баланс

Відповіді:


3978

У локальному клоні вашого роздрібного сховища ви можете додати оригінальний сховище GitHub як "віддалений". ("Віддалені" - це як прізвиська для URL-адрес сховищ - originце, наприклад,.) Тоді ви можете отримати всі гілки з цього сховища, а також відновити роботу, щоб продовжувати працювати над версією потоку. З точки зору команд, які можуть виглядати так:

# Add the remote, call it "upstream":

git remote add upstream https://github.com/whoever/whatever.git

# Fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:

git fetch upstream

# Make sure that you're on your master branch:

git checkout master

# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:

git rebase upstream/master

Якщо ви не хочете переписувати історію своєї головної гілки (наприклад, тому, що інші люди, можливо, її клонували), вам слід замінити останню команду на git merge upstream/master. Однак для подальших запитів на витягнення, які є максимально чистими, можливо, краще перезавантажити.


Якщо ви переобладнали своє відділення на upstream/masterвас, можливо, вам доведеться змусити натиснути, щоб перенести його до власного роздрібного сховища на GitHub. Ви зробите це з:

git push -f origin master

Використовувати їх потрібно лише -fперший раз після того, як ви перезаправились.


94
Оскільки ваша вилка існує лише на github, а в github немає інструментів для злиття через веб-інтерфейс, то правильна відповідь - зробити злиття вгору за течією локально і відсунути зміни назад до вашого вила.
Тім Кітінг

29
Ось чудовий підручник, який я знайшов, працюючи з github: gun.io/blog/how-to-github-fork-branch-and-pull-request
Тім Кітінг

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

11
Замість команди rebase я використав наступне: git merge --no-ff upstream/masterТаким чином ваші зобов’язання вже не переважають.
Стекдосерич

51
Ще одна невдача Git. Якщо цей інструмент повинен підтримувати розподілену співпрацю, то чому так складно виконати базовий робочий процес? 4 мільйони людей та 2200 грошей означають, що інструмент не вдався. "Ви можете додати оригінальний сховище GitHub як" віддалений ". Чому це навіть потрібно робити? Чому це не робиться під час вилки? Що так порушено в цьому інструменті?
jww

738

Починаючи з травня 2014 року, можна оновити вилку безпосередньо від GitHub. Це все ще працює з вересня 2017 року, Але це призведе до брудної історії вчинення.

  1. Відкрийте свою вилку на GitHub.
  2. Натисніть на Pull Requests.
  3. Натисніть на New Pull Request. За замовчуванням GitHub порівняє оригінал із вашою виделкою, і якщо ви не зробили жодних змін, не має нічого порівняти.
  4. Клацніть, switching the baseякщо ви бачите це посилання. В іншому випадку вручну встановіть base forkспадне місце на вилку, а head forkвгору - за течією. Тепер GitHub порівняє вашу вилку з оригіналом, і ви повинні побачити всі останні зміни. введіть тут опис зображення
  5. Create pull requestі призначити передбачуване ім’я вашому запиту на притягнення (наприклад, Update from original).
  6. Прокрутіть униз до Merge pull request, але ще нічого не натискайте.

Зараз у вас є три варіанти, але кожен призведе до менш чистої історії фіксації.

  1. За замовчуванням буде створено некрасиве об'єднання.
  2. Якщо натиснути спадне меню і вибрати "Сквош та злиття", всі втручаються комітети будуть розбиті на один. Найчастіше це те, чого ти не хочеш.
  3. Якщо ви натиснете Rebase and merge, всі комісії будуть зроблені "з" вас, оригінальні PR-адреси посилаються на ваш PR, і GitHub відобразиться This branch is X commits ahead, Y commits behind <original fork>.

Так що так, ви можете постійно оновлювати репо-версію за її верхнім потоком за допомогою веб-інтерфейсу GitHub, але це зробить вашу історію фіксацій. Замість цього дотримуйтесь командного рядка - це просто.


19
Це спрацювало чудово один раз. Вдруге цей процес не працював так само: посилання "Переключення основи" не з’явилося. І коли я натиснув "Клацніть, щоб створити запит на потяг", він створив PR на РЕПОРТІ ДЖЕРЕЛ. НЕ того, що я хотів ..
javadba

29
Все ще працює (Marchi 2015), але все, хоча посилання "Переключення бази" вже не існує. Вам потрібно змінити спадне меню "База", щоб обидва вказували на вашу вилку, і тоді ви отримаєте запит на "Порівняти через репост", який доставить вас туди, куди ви хочете.
mluisbrown

8
Квітень 2015 р. Працює. Дякую. Я отримав "Перехід на базу". Однак на кроці 6 було "Створити запит на потяг" -> введіть коментар -> "Створити запит на потяг". У кінцевому підсумку на 1 фіксування перед початком
Карланд

5
@cartland (або інші) - так, там написано: "Ця гілка на 1 перемогу попереду ..." Це турбує щось? Чи можна позбутися цього повідомлення?
RenniePet

11
хіба не краще, просто натисніть кнопку оновлення чи синхронізації!
трансформер

456

Ось офіційний документ GitHub про синхронізацію вилки :

Синхронізація виделки

Налаштування

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

Порада: синхронізація вилки оновлює лише локальну копію сховища; він не оновлює ваше сховище на GitHub.

$ git remote -v
# List the current remotes
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)

$ git remote add upstream https://github.com/otheruser/repo.git
# Set a new remote

$ git remote -v
# Verify new remote
origin    https://github.com/user/repo.git (fetch)
origin    https://github.com/user/repo.git (push)
upstream  https://github.com/otheruser/repo.git (fetch)
upstream  https://github.com/otheruser/repo.git (push)

Синхронізація

Для синхронізації вашого сховища з висхідним потоком необхідні два етапи: спочатку потрібно отримати з віддаленого пристрою, потім потрібно об'єднати потрібну гілку у вашу локальну гілку.

Збирання

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

$ git fetch upstream
# Grab the upstream remote's branches
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/otheruser/repo
 * [new branch]      master     -> upstream/master

Тепер у нас є головна гілка висхідного потоку, що зберігається в локальній гілці, вгору / поточній

$ git branch -va
# List all local and remote-tracking branches
* master                  a422352 My local commit
  remotes/origin/HEAD     -> origin/master
  remotes/origin/master   a422352 My local commit
  remotes/upstream/master 5fdff0f Some upstream commit

Злиття

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

$ git checkout master
# Check out our local master branch
Switched to branch 'master'

$ git merge upstream/master
# Merge upstream's master into our own
Updating a422352..5fdff0f
Fast-forward
 README                    |    9 -------
 README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

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

$ git merge upstream/master
Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Порада: Якщо ви хочете оновити свій сховище на GitHub, дотримуйтесь інструкцій, що тут


1
Це оновлення моєї локальної вилки, але на моїй вилці на Github.com все ще сказано, що "43 забирає позаду". Мені довелося використовувати техніку lobzik, щоб створити для себе запит на притягнення, щоб об'єднати основні зміни у мою вилку Github.com.
Майкл МакГінніс

11
@MichaelMcGinnis Після локального об'єднання вам доведеться натиснути зміни на github. git push origin master
джетнетт

1
Може бути розумним натиснути --follow-tags: stackoverflow.com/a/26438076/667847
kenny

1
Я повинен зробити це для всіх відділень окремо git merge upstream/master, потім перевірити, щоб розвивати філію і робитиgit merge upstream/develop
Шобі

stackoverflow.com/a/14074925/470749 мені було корисно, тому що я отримував, Permission denied (publickey). fatal: Could not read from remote repository.намагаючись отримати з акаунта Github Facebook вгору за течією.
Райан

98

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

  1. Змініть каталог у вашому локальному сховищі.

    • Перейдіть на головну галузь, якщо ви цього не зробите git checkout master
  2. Додайте батьківську як віддалене сховище, git remote add upstream <repo-location>

  3. Проблема git fetch upstream
  4. Проблема git rebase upstream/master

    • На цьому етапі ви перевіряєте, чи вводиться те, що буде об’єднано, ввівши git status
  5. Проблема git push origin master

Для отримання додаткової інформації про ці команди див. Крок 3 .


13
@MT: Де ти вводиш ці команди? Суть питання, наскільки я розумію, полягає в тому, як повторно синхронізувати вашу персональну вилку GitHub з головним проектом, і зробити це все з GitHub . Іншими словами, як можна оновити віддалений вилок без локального сховища?
Іоанн Y

4
@JohnY Використання GitHub завжди створить додатковий комітет. Вам потрібно зробити все це в оболонці на локальному репо, щоб уникнути зайвих фіксацій.
Джонатан Хрест

48

Вступне слово: Ваша вилка - це "джерело", а сховище, з якого ви розщелилися, - "вище".

Припустимо, що ви клонували свою вилку на комп'ютер за допомогою такої команди:

git clone git@github.com:your_name/project_name.git
cd project_name

Якщо це вказано, вам потрібно продовжити в такому порядку:

  1. Додайте "вище за течією" до свого клонованого сховища ("походження"):

    git remote add upstream git@github.com:original_author/project_name.git
    
  2. Отримайте коміти (та гілки) з "вище за течією":

    git fetch upstream
    
  3. Перейдіть на "головну" гілку вашої вилки ("походження"):

    git checkout master
    
  4. Закрийте зміни своєї "головної" гілки:

    git stash
    
  5. Об’єднайте зміни з "ведучої" гілки "вище за течією" у свою "головну" гілку вашого "походження":

    git merge upstream/master
    
  6. Вирішіть конфлікти злиття, якщо такі є, і здійсніть ваше злиття

    git commit -am "Merged from upstream"
    
  7. Змініть на вилку

    git push
    
  8. Поверніть свої приховані зміни (якщо такі є)

    git stash pop
    
  9. Ви закінчили! Вітаємо!

GitHub також надає інструкції з цієї теми: Синхронізація виделки


1
Допоміг частково: Це git remote add upstream git@github.com:original_author/project_name.gitлише псевдонім git remote add upstream https://github.com/original_author/project_name.git?
Вовк

2
Вовк , здогадуючись, ти це знаєш зараз, але для нащадків ... Це формат для ssh. help.github.com/articles/configuring-a-remote-for-a-fork
Бред Елліс

2
Дуже дякую. git stashі git stash popчастина дуже корисна
ввечері

Це спрацювало. Після злиття git вгору / головне, автоматичне злиття не вдалося через нерозміщені шляхи, які мені довелося запустити git add -A, а потім git commit -m "message", то це було актуально.
highcenbug

47

Якщо ви, як і я, ніколи не зобов’язуєтесь безпосередньо освоїти що- небудь , що ви повинні насправді, можете зробити наступне.

З локального клону вилки створіть пульт дистанційного керування. Це потрібно зробити лише один раз:

git remote add upstream https://github.com/whoever/whatever.git

Тоді, коли ви хочете наздогнати головну гілку сховища верхнього сховища, вам потрібно:

git checkout master
git pull upstream master

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

Минуле початкове налаштування upstream і master checkout, все, що вам потрібно зробити, це виконати наступну команду для синхронізації вашого майстра з upstream: git pull upstream master .


45

З листопада 2013 року відкрито неофіційний запит на функцію з GitHub, щоб попросити їх додати дуже простий та інтуїтивний метод, щоб зберегти локальну вилку в синхронізації з верхнім потоком:

https://github.com/isaacs/github/isissue/121

Примітка: Оскільки запит на функцію є неофіційним, також бажано зв’язатися, support@github.comщоб додати підтримку для такої функції, яка буде реалізована. Неофіційний запит на означення вище може бути використаний як доказ кількості зацікавленості у цьому здійсненні.


23

Станом на дату цієї відповіді, GitHub не має ( або я вже не кажу? ) Цієї функції у веб-інтерфейсі. Однак ви можете попросити support@github.comдодати свій голос за це.

Тим часом користувач GitHub bardiharborow створив інструмент для виконання саме цього: https://upriver.github.io/

Джерело тут: https://github.com/upriver/upriver.github.io


2
Поки я знаходжу цей інструмент, гарна ідея, реальність - це БРАТИ. З мого облікового запису було завантажено лише 20 репостів, і навіть колонтитул перенаправляє на веб-сайт, який не існує. Якщо це буде виправлено, я буду великим захисником.
sorin

2
На сьогоднішній день я успішно використовував upriver для синхронізації вилки з репостним потоком, тому він працює для моїх цілей, і я продовжуватиму його використовувати.
NauticalMile

1
@sorin Ці 20 обмежень репо / гілки (скоріше, зараз це 30) надходять із налаштувань підключення сторінки GitHub за замовчуванням. Для цього потрібно внести деякі адаптації до коду.
Андреас

19

Якщо ви використовуєте GitHub для Windows або Mac, тепер у них є функція одним кліком для оновлення вилок:

  1. Виберіть сховище в інтерфейсі користувача.
  2. Натисніть кнопку "Оновити від користувача / відділення" вгорі.


11

Насправді, можна створити гілку у вашій вилці з будь-якого комітету висхідного потоку в браузері:

  • Відкрийте https://github.com/<repo>/commits/<hash>, де repo - це ваша вилка, а хеш - це повний хеш-код, який ви можете знайти у верхньому веб-інтерфейсі. Наприклад, я можу відкрити https://github.com/max630/linux/commiss/0aa0313f9d576affd7747cc3f179feb097d28990 , що вказує на linux masterчас написання.
  • Натисніть кнопку "Дерево: ....".
  • Введіть назву нової гілки та натисніть Enter

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

Потім ви можете занести цю гілку до свого локального клону, і вам не доведеться пересилати всі ці дані назад до GitHub, коли ви натискаєте правки поверх цього комітету. Або скористайтеся веб-інтерфейсом, щоб щось змінити у цій гілці.

Як це працює (це здогад, я не знаю, як саме GitHub це робить): forks ділиться об'єктом зберігання та використовує простори імен для розділення посилань користувачів. Таким чином, ви можете отримати доступ до всіх комітетів через вашу вилку, навіть якщо вони не існували до моменту розгортання.


2
Це чудово! Це дозволяє уникнути абсолютно безглуздого завантаження цих комісій у github.
Ротсор

9

Виконайте наведені нижче дії. Я спробував їх, і це мені допомогло.

Оформити замовлення у своє відділення

Синтаксис: git гілка yourDevelopmentBranch
Приклад: майстер оформлення замовлення git

Потягніть гілку джерела сховища для отримання останнього коду

Синтаксис: git pull https://github.com/tastejs/awesome-app-ideas master
Приклад: git pull https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME


1
Якщо ви використовуєте GitHub, ви також можете передати свої зміни до своєї філії GitHub. git push HttpsForYourForkOfTheRepo BRANCH_NAME
користувач3731622

9

Я оновлюю роздвоєні репости цим рядком:

git pull https://github.com/forkuser/forkedrepo.git branch

Використовуйте це, якщо ви не хочете додати до свого проекту ще одну віддалену кінцеву точку, як і інші рішення, розміщені тут.


2
Чи є в цьому обмеження? тобто чи застосовується вона лише до випадків, коли ви не додавали комісій, об'єднань, запитів на витягнення або запити на витяг об'єднувались у вище за течією після останнього оновлення?
LightCC

1
це працює як звичайний витяг із віддаленої гілки. Якщо ви зробили X, здійснюючи місцеве репо, а тепер ви Y покладаєтесь на початкове репо, це приведе Y зобов'язання до вашої місцевої філії і, ймовірно, доставить вам деякі конфлікти для вирішення.
Р.Браво

1
@LightCC Це не чим іншим, ніж витягнути з раніше доданого пульта, за винятком того, що ви не додали пульт . Тож недоліком є ​​те, що вам доведеться вводити повну URL-адресу сховища кожного разу, коли вам потрібно pull.
Марк.2377,

1
Це ідеальне рішення, якщо вам не доведеться багато разів тягнути з оригінального репо, або проект роздвоєння порівняно простий.
AxeEffect

7

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

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

Потім запустіть:

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

У першій частині цієї команди перераховані всі головки у віддаленому віддаленому РЕПО за течією та видаляється SHA-1 з наступним refs/heads/префіксом назви гілки.

Потім для кожної з цих гілок вона виштовхує локальну копію верхньої віддаленої гілки відстеження ( refs/remotes/upstream/<branch>з локальної сторони) безпосередньо на віддалену гілку за початком ( refs/heads/<branch>на віддаленій стороні).

Будь-яка з цих команд синхронізації гілок може не працювати з однієї з двох причин: або гілка вище за течією була переписана, або ви натиснули коміти на цій гілці до роздрібнення. У першому випадку, коли ви не зробили нічого з гілкою на вилці, безпечно натиснути (Додайте перемикач -f ; тобто git push -fв команді вище). В іншому випадку це нормально, оскільки відгалуження вашої вилки розходиться, і ви не можете очікувати, що команда синхронізації буде працювати, поки ваші коміти не будуть об'єднані назад у верхню течію .


6

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

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

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


2
Зверніть увагу, що за допомогою базової установки ви можете втратити зміни, внесені у ваше роздрібне сховище. Щоб зберегти зміни, налаштуйте файл конфігурації та вкажіть a mergemethod. Більше про це тут
Саураб П Бхандарі

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

4

Android Studio тепер навчився працювати з репозиторіями вилок GitHub (вам навіть не потрібно додавати віддалений сховище "upstream" за допомогою команди консолі).

Відкрийте меню VCSGit

І зверніть увагу на два останні пункти меню:

  • Переставте мою виделку GitHub

  • Створіть витягнути запит

Спробуйте їх. Я використовую перший для синхронізації свого локального сховища. У будь-якому випадку гілки батьківського віддаленого сховища ("вище за течією") будуть доступні в Android Studio після натискання кнопки "Побазувати мою вилку GitHub", і ви зможете легко працювати з ними.

(Я використовую Android Studio 3.0 із плагінами "Git інтеграція" та "GitHub".)

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


4

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

$ cd project-name

$ git remote add upstream https://github.com/user-name/project-name.git
 # Adding the upstream -> the main repo with which you wanna sync

$ git remote -v # you will see the upstream here 

$ git checkout master # see if you are already on master branch

$ git fetch upstream

І там вам добре поїхати. Усі оновлені зміни в головному сховищі будуть перенесені у ваше сховище виделки.

Команда "Вибір" незамінна для того, щоб бути в курсі сучасних проектів: лише виконуючи "git fetch", ви будете проінформовані про зміни, які ваші колеги відсунули на віддалений сервер.

Ви все ще можете завітати сюди для подальших запитів


4

Якщо ви встановите свій потік. Перевірте git remote -v, тоді цього буде достатньо.

git fetch upstream
git checkout master
git merge --no-edit upstream/master
git push

2

Це залежить від розміру вашого сховища та того, як ви його розщедрили.

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

Спробуйте прочитати цю . Тут описано, як обробляти великі сховища Git та як їх передавати за допомогою останніх змін.


2

Я хотів би додати до @ krlmlr - х відповіді .

Спочатку роздвоєне сховище має один філія по імені: master. Якщо ви працюєте над новою функцією або виправленням, ви, як правило, створили нову гілку featureта внесли зміни.

Якщо ви хочете, щоб роздвоєний сховище синхронізувався з батьківським сховищем, ви можете встановити файл конфігурації ( pull.yml) для програми Pull ( у вікні функції ), наприклад:

version: "1"
rules:
  - base: feature
    upstream: master
    mergeMethod: merge
  - base: master
    upstream: parent_repo:master
    mergeMethod: hardreset

Це підтримує masterгілку роздвоєного репо в курсі батьківського репо. Він оновлює featureгілку роздвоєного репо через оновлення masterроздвоєного репо, об'єднуючи ту саму. Це передбачає, що featureгілка - це гілка за замовчуванням, яка містить конфігураційний файл.

Тут mergemethodsграють два , один - hardresetце допомагає примусово синхронізувати зміни у masterгілці роздвоєного репо з батьківським репо, а інший - це merge. Цей метод використовується для об'єднання змін, здійснених вами у featureгілці, та змін, що відбулися завдяки силовій синхронізації у masterгілці. У разі конфлікту злиття додаток "pull" дозволить вам вибрати наступний хід дій під час запиту на потяг.

Про основні та розширені конфігурації та різні mergemethods тут можна прочитати .

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


1

Є дві основні речі щодо збереження роздрібного сховища завжди оновленого назавжди.

1. Створіть гілки у майстра вилки та зробіть зміни .

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

2. Створіть заплановане завдання для майстра вилки для автоматичного оновлення .

Це можна зробити за допомогою cron . Ось приклад коду, якщо ви робите це в Linux.

$ crontab -e

покладіть цей код на, crontab fileщоб виконувати завдання щогодини.

0 * * * * sh ~/cron.sh

потім створіть cron.shфайл сценарію та взаємодію git із ssh-агентом та / або очікуйте, як показано нижче

#!/bin/sh
WORKDIR=/path/to/your/dir   
REPOSITORY=<name of your repo>
MASTER="git@github.com:<username>/$REPOSITORY.git"   
UPSTREAM=git@github.com:<upstream>/<name of the repo>.git  

cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent` && expect ~/.ssh/agent && ssh-add -l
git clone $MASTER && cd $REPOSITORY && git checkout master
git remote add upstream $UPSTREAM && git fetch --prune upstream
if [ `git rev-list HEAD...upstream/master --count` -eq 0 ]
then
    echo "all the same, do nothing"
else
    echo "update exist, do rebase!"
    git reset --hard upstream/master
    git push origin master --force
fi
cd $WORKDIR && rm -rf $REPOSITORY
eval `ssh-agent -k`

Перевірте своє роздрібнене сховище. Час від часу він завжди показуватиме це сповіщення:

Ця галузь є навіть із <upstream>: майстер .

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


0

Використовуйте ці команди (на щастя)

git remote -v
git pull
git fetch upstream
git checkout master
git merge upstream/master --no-ff
git add .
git commit -m"Sync with upstream repository."
git push -v
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.