Instead of doing:
git push origin --all && git push nodester --all && git push duostack --all
Is there a way to do that wit
git remote | xargs -L1 git push --all
Replace master
with the branch you want to push.
git remote | xargs -L1 -I R git push R master
git config --global alias.pushall '!git remote | xargs -L1 git push --all'
Running git pushall
will now push all branches to all remotes.
Create an all
remote with several repo URLs to its name:
git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git
Then just git push all --all
.
This is how it looks in .git/config
:
[remote "all"]
url = origin-host:path/proj.git
url = nodester-host:path/proj.git
url = duostack-host:path/proj.git
If you want to always push to repo1, repo2, and repo3 but always pull only from repo1, set up the remote 'origin' as
[remote "origin"]
url = https://exampleuser@example.com/path/to/repo1
pushurl = https://exampleuser@example.com/path/to/repo1
pushurl = https://exampleuser@example.com/path/to/repo2
pushurl = https://exampleuser@example.com/path/to/repo3
fetch = +refs/heads/*:refs/remotes/origin/*
Configure at command line:
$ git remote add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo2
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo3
If you only want to pull from repo1
but push to repo1
and repo2
for a specific branch specialBranch
:
[remote "origin"]
url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
fetch = +refs/heads/*:refs/remotes/origin/*
...
[remote "specialRemote"]
url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo2.git
fetch = +refs/heads/*:refs/remotes/origin/*
...
[branch "specialBranch"]
remote = origin
pushRemote = specialRemote
...
See https://git-scm.com/docs/git-config#git-config-branchltnamegtremote.
I wrote a short bash function to push to many remotes in one call. You can specify a single remote as a parameter, multiple remotes separated by spaces or don't specify any to have it push to all remotes.
This can be added to your .bashrc or .bash_profile.
function GitPush {
REMOTES=$@
# If no remotes were passed in, push to all remotes.
if [[ -z "$REMOTES" ]]; then
REM=`git remote`
# Break the remotes into an array
REMOTES=$(echo $REM | tr " " "\n")
fi
# Iterate through the array, pushing to each remote
for R in $REMOTES; do
echo "Pushing to $R..."
git push $R
done
}
Example: Let's say your repo has 3 remotes: rem1, rem2 and rem3.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
You can utilize git hooks - especially pre-push
: add non-origin pushes to .git/hooks/pre-push
.
As a CLI Alternative to editing the .git/config file, you could use the following commands:
# git remote add all origin-host:path/proj.git
# git remote set-url --add all nodester-host:path/proj.git
# git remote set-url --add all duostack-host:path/proj.git
The same git push all --all
works here as well.
You have accomplished the same as answer #1. You have just done it with Command Line instead of raw editing of the config file.