代わりに:
git push origin --all && git push nodester --all && git push duostack --all
1つのコマンドだけでそれを行う方法はありますか?
ありがとう:)
all
、すべてのリモコン上のプッシュにリモートを参照してください。stackoverflow.com/a/18637593/802365
代わりに:
git push origin --all && git push nodester --all && git push duostack --all
1つのコマンドだけでそれを行う方法はありますか?
ありがとう:)
all
、すべてのリモコン上のプッシュにリモートを参照してください。stackoverflow.com/a/18637593/802365
回答:
git remote | xargs -L1 git push --all
master
プッシュするブランチに置き換えます。
git remote | xargs -L1 -I R git push R master
git config --global alias.pushall '!git remote | xargs -L1 git push --all'
実行git pushall
すると、すべてのブランチがすべてのリモートにプッシュされます。
xargs: illegal option -- l
OSX に乗っています。それをgit remote | xargs -L1 git push
man xargs
オプション-l
は廃止されると述べています。
!
は、以下は内部gitコマンドではなく、外部シェルコマンドであることを意味します。
all
名前にいくつかのリポジトリURLを使用してリモートを作成します。
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
その後だけgit push all --all
です。
これは次のようになります.git/config
。
[remote "all"]
url = origin-host:path/proj.git
url = nodester-host:path/proj.git
url = duostack-host:path/proj.git
git fetch --all
ようなプッシュを実行した直後に実行する必要があります。
all
が使用可能になったときにリモートに追加する必要があることですが、新しいURL git remote | xargs -L1 git push --all
は自動的に取得されます。
all
:あなたがコミット送るたび、だけではなく、「すべて」の「起源」を使用git remote set-url --add origin nodester-host:path/proj.git
git push
は、すべてのURLが更新されません。回答はそれに応じて更新
常にrepo1、repo2、およびrepo3にプッシュしたいが、常にrepo1からのみプルしたい場合は、リモート 'origin'を次のように設定します。
[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/*
コマンドラインで設定:
$ 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
あなたがもしのみからプルしたいrepo1
が、プッシュするrepo1
とrepo2
、特定のブランチ用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
...
https://git-scm.com/docs/git-config#git-config-branchltnamegtremoteを参照してください。
git push
引数なしでa を実行できるので、これは実際には本当に便利です。
.git / configファイルを編集する代わりのCLIとして、次のコマンドを使用できます。
# 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
git push all --all
ここでも同じことが言えます。
回答1と同じことを達成しました。設定ファイルを直接編集するのではなく、コマンドラインでそれを行ったところです。
1回の呼び出しで多くのリモートにプッシュする短いbash関数を作成しました。パラメータとして単一のリモートを指定することも、スペースで区切って複数のリモートを指定することも、すべてのリモートにプッシュするように指定することもできません。
これは、.bashrcまたは.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
}
例:リポジトリに3つのリモート(rem1、rem2、およびrem3)があるとします。
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush