Different default remote (tracking branch) for git pull and git push
For Git 1.6.4 and later, set remote.<name>.pushurl
with git config.
One might use this to pull using the read-only https:
protocol and push using an ssh-based protocol.
Say origin
's url (remote.origin.url
) is https://git.example.com/some/repo.git
. It is read-only, but you have write access through the ssh-based ‘URL’ [email protected]:some/repo.git
. Run the following command to effect pushing over the ssh-based protocol:
git config remote.origin.pushurl [email protected]:some/repo.git
From what I can gather from the git config man page, the upstream repo is:
- by default origin
- set by
branch.remote
- always for both
git pull/fetch
andgit pull
For a given branch, I don't see any way to have two separate remote by default.
Since Git 1.8.3, you can use the remote.pushDefault
option to do exactly what you want (i.e. having different default remotes for pull
and push
). You can set the option just like any other; for example, to set it to the pushTarget
remote, use
git config remote.pushDefault pushTarget
This option will have the following effect:
git pull
will pull from the remote specified by theremote
option in the relevant branch section in.git/config
, whilegit push
will push to the remote specified byremote.pushDefault
.
Note that you need to specify the name of a remote, not an URL. This makes this solution more flexible than the solution involving remote.<name>.pushurl
, because (for example) you will still have tracking branches for both remotes. Whether you need or want this flexibility is up to you.
The release notes say this option was added specifically to support triangular workflows.
Since Git version 1.7.0, you can set this with:
git remote set-url --push origin https://your.push.com/blah/