web-dev-qa-db-ja.com

git複数のリポジトリへの同時プッシュ

git Pushを作成してOriginだけでなく、別のリモートリポジトリにもプッシュするにはどうすればよいですか?

git Pushgit Push Originのエイリアスにすぎないため、git Push to Pushを一度に2つのリモートリポジトリにエイリアスできますか(1つのコマンドだけで)。

ここでは非gitスクリプトを探していませんが、gitのローカルリポジトリに対してこれを設定したいと思います。

プッシュ後のスクリプトで試したときに失敗しました。

84
Kissaki

Gitにフラグを設定するだけではそれができるとは思いませんが、手動ですべてを入力せずに複数のリモートリポジトリにプッシュできるようにする構成ファイルを変更できます(最初に入力するだけで、後ではない)

の中に .git/configファイルでは、定義済みのリモートに複数のURLを追加できます。

[remote "all"]
    url=ssh://user@server/repos/g0.git
    url=ssh://user@server/repos/g1.git

もし、あんたが git Push all今、すべてのリモートURLにプッシュします。

127
g19fanatic

手動編集なし

異なるURLでgit config --add remote.xyz.urlを使用することにより、コマンドラインから直接リモートブランチ(たとえばall)に複数のURLを追加できます。

git config --add remote.all.url ssh://user@server/repos/g0.git
git config --add remote.all.url ssh://user@server/repos/g1.git

全自動

あなたがsuper lazyで、URLを何度もコピー/ペーストすることに耐えない場合、これはあなたのためです:

function git-add-Push-all() {
  while read -r name url method; do
    git config --add remote.all.url "$url"
  done < <(git remote -v | awk '!/^all/ && /Push/')
}

git-add-Push-all # from git (sub)directory

完全なbashyスクリプトが可能です(テスト$nameおよび$method)が、awkは甘く、すべての人に愛があります。

押す

次に、すべてのリモートにプッシュすることができます

git Push all

参照資料

55
Édouard Lopez

設定済みのリモートからURLを取得することもできます:

for repo in g0 g1 ...
do
    git config --add remote.all.url `git config remote.$repo.url`
done

ここで、g0、g1、...はリモートの名前です。