##Подход с разными репозиториями для origin и для upstream:
-
fork a repo (на сайте github): https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
-
скопировать ссылку из своего репозитория (не из исходного): https://github.com/YOUR_USERNAME/YOUR_FORK.git
-
git remote -v
- должно показать 2 ветки origin:
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
-
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
-
git remote -v
- должно показать 4 ветки: 2 origin и 2 upstream:
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
-
Что с этим всем делать? В такой модели для того, чтобы синхронизировать свой форк с исходной репой - надо перед изменениями делать последовательность команд:
- git fetch upstream # вытянули изменения
- git checkout master # переключились на master своего форка
- git merge upstream/master # слили изменения со своим форком
##Подход с одним репозиторием, но разными источниками для fetch и push:
-
fork a repo (на сайте github): https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
-
скопировать ссылку из своего репозитория (не из исходного): https://github.com/YOUR_USERNAME/YOUR_FORK.git
-
git remote -v
- должно показать 2 ветки origin:
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
-
git remote set-url --push https://github.com/YOUR_USERNAME/YOUR_FORK.git
-
git remote -v
- должно показать 2 ветки origin:
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
-
Здесь для синхронизации ничего не надо делать - по умолчанию git fetch будет вытягивать последнюю версию из оригинальной репы, а git push - будет класть изменения к себе в форк
-
Минус такого подхода - в том, что более сложное разрешение конфликтов. При локальном разрешении конфликтов github не даст сделать git push, так как в удаленном репозитории не будет тех коммитов, что вы сделали локально. В этом случае надо только создавать на сайте pull request и мейнтейнер должен его принять.
Доступные опросы: