Able to push to all git remotes with the one command?

前端 未结 6 1490
广开言路
广开言路 2020-11-30 16:10

Instead of doing:

git push origin --all && git push nodester --all && git push duostack --all

Is there a way to do that wit

相关标签:
6条回答
  • 2020-11-30 16:31

    To push all branches to all remotes:

    git remote | xargs -L1 git push --all
    

    Or if you want to push a specific branch to all remotes:

    Replace master with the branch you want to push.

    git remote | xargs -L1 -I R git push R master
    

    (Bonus) To make a git alias for the command:

    git config --global alias.pushall '!git remote | xargs -L1 git push --all'
    

    Running git pushall will now push all branches to all remotes.

    0 讨论(0)
  • 2020-11-30 16:31

    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
    
    0 讨论(0)
  • 2020-11-30 16:33

    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.

    0 讨论(0)
  • 2020-11-30 16:34

    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
    
    0 讨论(0)
  • 2020-11-30 16:34

    You can utilize git hooks - especially pre-push: add non-origin pushes to .git/hooks/pre-push.

    0 讨论(0)
  • 2020-11-30 16:42

    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.

    0 讨论(0)
提交回复
热议问题