[解決済み] Git - コードを2つのリモートにプッシュする [重複] [重複
質問
私は
二
リモート git リポジトリ。
origin
と
github
自分のブランチをプッシュする
devel
を両方のリポジトリに追加しました。
git push -u origin devel
git push -u github devel
でも、そうすると
git push
にプッシュされるだけだろう。
github
.
2つのリモートをセットアップして、1つのコマンドで両方のリポジトリに変更をプッシュできるようにする方法はないですか?
解決方法は?
最近のバージョンのGitでは、複数の
pushurl
を指定したリモートで使用できます。以下を使用して、2つの
pushurl
を
origin
:
git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git
にプッシュすると
origin
を実行すると、両方のリポジトリにプッシュされます。
アップデイト1
: Git 1.8.0.1 と 1.8.1 (そしておそらく他のバージョンも) には、次のようなバグがあるようです。
--add
を使用すると元のURLに置き換わるので、同じコマンドを使用して元のURLを再追加する必要があります。実行方法
git remote -v
をクリックすると、各リモートの現在の URL が表示されます。
アップデイト2。
GitのメンテナであるJunio C. Hamanoは、そのように設計されていると説明しました。やること
git remote set-url --add --push <remote_name> <url>
が追加され
pushurl
は、指定されたリモートに対して
オーバーライド
は、プッシュのデフォルトURLです。ただし、複数の
pushurl
を使用することで、複数のリモートにプッシュすることができます。
git push
. この動作は、以下で確認することができます。
$ git clone git://original/repo.git
$ git remote -v
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.'
remote.origin.url=git://original/repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
さて、ひとつのコマンドで複数のリポジトリにプッシュしたい場合は、新しいリモートである
all
(で提案されているように
アダム・ネルソン
を使用し続けるか、コメントで
origin
しかし、後者の名前は、この目的にはあまり説明的ではありません。もし、まだ
origin
を使用すると、次のステップをスキップして
origin
の代わりに
all
を他のすべてのステップで使用します。
という新しいリモートを追加してみましょう。
all
これは、後で複数のリポジトリにプッシュするときに参照します。
$ git remote add all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch) <-- ADDED
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git <-- ADDED
remote.all.fetch=+refs/heads/*:refs/remotes/all/* <-- ADDED
次に
pushurl
に
all
リモートで、別のリポジトリを指しています。
$ git remote set-url --add --push all git://another/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push) <-- CHANGED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git <-- ADDED
ここで
git remote -v
は、新しい
pushurl
をプッシュするため、もし
git push all master
をプッシュします。
master
ブランチを
git://another/repo.git
だけです。これは、どのように
pushurl
はデフォルトの url (remote.all.url) をオーバーライドします。
では、もうひとつの
pushurl
は元のレポジトリを指しています。
$ git remote set-url --add --push all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push)
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git
remote.all.pushurl=git://original/repo.git <-- ADDED
の両方が表示されます。
pushurl
を追加したのはそのままです。今度は1つの
git push all master
を押すと
master
ブランチを両方の
git://another/repo.git
と
git://original/repo.git
.
重要なお知らせ
: リモートでプッシュの受け入れ/拒否のルール(フック)が分かれている場合、一方のリモートでは受け入れられ、他方では拒否されることがあります。そのため、両者の履歴をまったく同じにしたい場合は、ローカルでコミットを修正して両方のリモートで受け入れられるようにしてから再度プッシュするか、あるいは履歴を書き換える (たとえば
push -f
この場合、あなたの以前の変更をすでにリポジトリから取得している人に迷惑がかかる可能性があります。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git rebase の取り消し
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
gitアップロードの共通エラー処理
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] 複数のリモートロケーションからプル/プッシュするにはどうすればよいですか?
-
[解決済み】プロジェクトは複数のオリジンを持つことができますか?
-
[解決済み】1つのコマンドで全てのgitリモートにプッシュできるようになった?
-
[解決済み] GitHubでWikiページをプルリクエストする方法とは?