2016-07-22 10 views
2

私は異なるpush構成のリモコンをいくつか持っています。例えば異なる設定で複数のgitリポジトリにプッシュするにはどうすればいいですか?

[remote "public"] 
    url = ssh://external-server/repo 
    push = refs/heads/master:refs/heads/master 

[remote "internal"] 
    url = ssh://internal-server/repo 
    push = refs/heads/*:refs/heads/* 

レイヤーを追加することなく、単一の単純なコマンドで両方のリポジトリにプッシュすることは可能ですか?

私はpushUrlを関連する質問で示唆したように試みましたが、これはURLを予期し、リモートを許可しません。その後、私は

[remote "all"] 
    pushUrl = "ext::git push public" 
    pushUrl = "ext::git push internal" 

に似git-remote-extを使用するように変更されしかし、これは最初のリポジトリにプッシュし、

fatal: Could not read from remote repository. 

マニュアルシェルコマンド(git push public && git push internal)で、その後失敗するため、私は現実には解決策ではありませんリモート(例えば、顧客、公共リポジトリ、内外のミラー、テストシステム、読み取り専用ソースがホストするgitサーバ)の異なるセットを持っている多くのリポジトリを持っています。時には彼らは

git submodule foreach 'git push all' 

のような私が邪魔にプッシュするサブモジュールに別名を定義すると、動作しますが、あまりにも不器用で、何とか(物事をプッシュするgit pushを使用して)通常のワークフローを壊すかもしれませんしています。

答えて

1

関連する質問は「Git - Pushing code to two remotes」で、リモートallとプッシュurlsが必要です。

ext::git push publicはURLではありません。 ssh://external-server/repoです。デフォルトでは

git remote rm all 
git remote add all ssh://internal-server/repo 
git remote set-url --add --push all ssh://internal-server/repo 
git remote set-url --add --push all ssh://external-server/repo 

、それはあなたが上流にあなたのデフォルトのプッシュポリシーを設定した場合、上流の枝を持っている唯一の支店がプッシュされますrefs/heads/*:refs/heads/*

refspecプッシュを使用します。

git config push.default simple 

+0

、どのように、ここでは異なる 'push'セットアップを指定するのですか?例えば。私は内部のサーバ上のすべてのブランチを望んでいますが、外部のものには 'master'しかありません。 – ensc

+0

@enscわからない。私はpush.policy(編集の回答)に行くだろうが、あなたはそれをテストし、どのブランチがプッシュされるのを見る必要があります(実際の内部と外部のリモートではなくダミーのリモートを使用してください: – VonC

+0

hacky)。 ...内部リポジトリへの '-next'ブランチの強制プッシュをどのように表現しますか(' push = + refs/heads/next:refs/heads/next'')? – ensc

関連する問題