Git Add Another Remote to an Existing Repository: Difference between revisions
(11 intermediate revisions by the same user not shown) | |||
Line 16: | Line 16: | ||
origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (fetch) | origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (fetch) | ||
origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (push) | origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (push) | ||
For the sake of simplicity, we will use just one branch ("master"), which will have a corresponding "master" [Git_Concepts#Remote-Tracking_Branch|remote-tracking branch]] in each remote repository. | |||
=Procedure= | =Procedure= | ||
Line 37: | Line 39: | ||
origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (push) | origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (push) | ||
and [[.git/config]] is updated accordingly | and [[.git/config#.5Bremote.5D|.git/config]] is updated accordingly | ||
... | ... | ||
Line 43: | Line 45: | ||
url = git@github.com:NovaOrdis/novaordis-session-servlet.git | url = git@github.com:NovaOrdis/novaordis-session-servlet.git | ||
fetch = +refs/heads/*:refs/remotes/github/* | fetch = +refs/heads/*:refs/remotes/github/* | ||
... | |||
The second [[Git_Concepts#Remote-Tracking_Branch|remote-tracking branch]] is automatically setup: | |||
git branch -a | |||
* master | |||
remotes/github/master | |||
remotes/origin/master | |||
==State== | |||
At this point, the master branch's default remote is origin:/master: | |||
[branch "master"] | |||
'''remote''' = '''origin''' | |||
merge = refs/heads/master | |||
==Merge a Change Introduced by the Origin== | |||
git pull | |||
==Push a Change to Origin== | |||
git push | |||
==Merge a Change Introduced on the Second Remote== | |||
git pull github master | |||
The second remote ("github") has to be specified. Also, because [[Git_Concepts#Each_Local_Branch_Has_at_Most_One_Configured_Remote-Tracking_Branch|the "master" branch is configured with the "origin" default remote]], we also need to explicitly specify the second remote branch we want to pull ("master"). | |||
==Push a Change to the Second Remote== | |||
git push github |
Latest revision as of 22:26, 11 December 2017
Internal
Overview
This article describes the procedure of adding a second remote to an existing repository. A practical situation when we would need something like this is when we developed an an application in an internal repository - for example a Gogs instance deployed within an OpenShift cluster - and we want to share the example in GitHub, while maintaining the internal repository fully operable. We start from a local repository fully synchronized with the Gogs repository:
git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
git remote -v show origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (fetch) origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (push)
For the sake of simplicity, we will use just one branch ("master"), which will have a corresponding "master" [Git_Concepts#Remote-Tracking_Branch|remote-tracking branch]] in each remote repository.
Procedure
Create the Second Repository
Use GitHub's UI. For consistency, use the same repository name, though it is not necessary.
Add the Second Remote
From the local repository, add the GitHub remote:
git remote add github git@github.com:NovaOrdis/novaordis-session-servlet.git
The remote is immediately added:
git remote -v show github git@github.com:NovaOrdis/novaordis-session-servlet.git (fetch) github git@github.com:NovaOrdis/novaordis-session-servlet.git (push) origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (fetch) origin https://gogs-cicd.apps.openshift.novaordis.io/gogs/novaordis-session-servlet.git (push)
and .git/config is updated accordingly
... [remote "github"] url = git@github.com:NovaOrdis/novaordis-session-servlet.git fetch = +refs/heads/*:refs/remotes/github/* ...
The second remote-tracking branch is automatically setup:
git branch -a * master remotes/github/master remotes/origin/master
State
At this point, the master branch's default remote is origin:/master:
[branch "master"] remote = origin merge = refs/heads/master
Merge a Change Introduced by the Origin
git pull
Push a Change to Origin
git push
Merge a Change Introduced on the Second Remote
git pull github master
The second remote ("github") has to be specified. Also, because the "master" branch is configured with the "origin" default remote, we also need to explicitly specify the second remote branch we want to pull ("master").
Push a Change to the Second Remote
git push github