新しく作成したブランチを含め、デフォルトですべてのブランチをプッシュおよびプルしたいと思います。
定義できる設定はありますか?
それ以外の場合、ローカルで新しいブランチを追加し、それをサーバーからプルしたい場合、それを行う最も簡単な方法は何ですか?
同じ名前の新しいブランチを作成してプルしようとしましたが、機能しません。ブランチのすべてのリモート構成を尋ねられます。どうすれば設定できますか。
新しく作成したブランチを含め、デフォルトですべてのブランチをプッシュおよびプルしたいと思います。
定義できる設定はありますか?
それ以外の場合、ローカルで新しいブランチを追加し、それをサーバーからプルしたい場合、それを行う最も簡単な方法は何ですか?
同じ名前の新しいブランチを作成してプルしようとしましたが、機能しません。ブランチのすべてのリモート構成を尋ねられます。どうすれば設定できますか。
最も簡単な方法は次のとおりです。
git push --all origin
これにより、タグとブランチがプッシュされます。
最新のgitでは、常にすべてのブランチをフェッチしますrefs/remotes/origin/*
(名前空間へのリモート追跡ブランチとして、git branch -r
またはで表示されますgit remote show origin
)。
デフォルトでは(構成push.default
変数のドキュメントを参照) 、一致するブランチをプッシュします。つまり、最初git push origin branch
にgitが常にオンにプッシュする必要がありますgit push
。
常にすべてのブランチをプッシュする場合は、pushrefspecを設定できます。リモートに名前が付けられていると仮定すると、gitconfigorigin
を使用できます。
$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'
または、ファイルを直接編集.git/config
して、次のようにします。
[リモート「オリジン」] url = user@example.com:/srv/git/repo.git フェッチ=+refs / heads / *:refs / remotes / origin / * フェッチ=+refs / tags / *:refs / tags / * push = + refs / heads / *:refs / heads / * push = + refs / tags / *:refs / tags / *
プッシュ仕様に+を含めることは、おそらく悪い考えです。これは、gitが-fがなくても早送りではないプッシュを喜んで実行することを意味し、リモートサーバーがそれらを受け入れるように設定されている場合、履歴を失う可能性があります。
これだけ試してみてください:
$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'
以下のコマンドを使用して、すべてのブランチを新しいリポジトリに移行しました。
~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror
注:リポジトリをAtlassianStashからAWSCodeCommit(空白のリポジトリ)に複製するときに、最後から2番目(つまり、マスターを最初にプッシュ)コマンドを使用する必要がありました。理由はわかりませんが、(git push new-origin --mirror
)を押した後、デフォルトのブランチは。以外のブランチを参照していましmaster
た。
古いリポジトリから新しいリポジトリにブランチを移動していて、すべての古いリポジトリブランチがローカルにない場合は、最初にそれらを追跡する必要があります。
for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done
次に、新しいリモートリポジトリを追加します。
git remote add bb <path-to-new-repo>
次に、次のコマンドを使用してすべてをプッシュできます。
git push -u bb --all
または、これを1回行っていない場合、またはローカルブランチの移動のみを検討している場合は、ここにある他の応答に記載されているgitconfigコマンドを使用してリポジトリを構成できます。
重要な点は、他の応答はすべてのローカルブランチのみをプッシュすることです。ブランチが代替のREMOTEリポジトリにのみ存在する場合、最初にブランチを追跡せずにブランチを移動することはありません。ここに示されているforループはそれを支援します。
すべてのブランチを古いリポジトリから新しいリポジトリに移動する場合は、ローカルリポジトリで、新しいリポジトリにプッシュする前に、既存のオリジンブランチへの各ブランチの追跡を設定する必要があります。そうしないと、すべてのオリジンブランチがに表示されません。新しい起源。各ブランチを追跡またはチェックアウトして手動でこれを行うか、1つのライナーを使用します。
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done
この1行のコマンドは、このページの他の回答にあるバージョンに基づいていますが、次の理由で間違いなく優れています。
次に、原点を切り替える場合は、古い原点へのリンクを置き換えて、新しいリモコンをポイントします。bitbucket / github GUIを使用して、最初に新しいリモートを作成するようにしてください。ただし、ファイルを追加しないでください。追加すると、マージの問題が発生します。例えば
git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git
今プッシュします。タグをプッシュするには、2番目のコマンドも必要であることに注意してください。
git push -u --all origin
git push --tags origin
を使用せずにすべてのブランチを表示するには、git branch -a
次を実行する必要があります。
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
これで、すべてのブランチを確認できます。
git branch
すべてのブランチをプッシュするには、次のことを試してください。
git push --all
あるリモートオリジンから別のリモートオリジンにプッシュする場合は、次を使用できます。
git push newremote refs/remotes/oldremote/*:refs/heads/*
これは私のために働いた。これを参照してください:https ://www.metaltoad.com/blog/git-push-all-branches-new-remote
すべてのブランチとタグを転送するために私が働いた完全な手順は、@vikas027と@kumarahulの回答を組み合わせることです。
~$ git clone <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin --mirror
~$ git push new-origin refs/remotes/origin/*:refs/heads/*
~$ git push new-origin --delete HEAD
最後のステップはHEAD
、ワイルドカードが原因で、という名前のブランチが新しいリモートに表示されるためです。
@kumarahulが投稿したように、ここで最良かつ最も簡単な方法を見つけました。これは私にとって魅力のように機能し、すべてのタグとブランチを元の場所から新しいリモートにプッシュします。
git remote add newremote new-remote-url
git push newremote --tags refs/remotes/origin/*:refs/heads/*
'git push --all -u newremote'を使用しましたが、チェックアウトされたブランチをnewremoteにプッシュするだけです。
Git:すべてのブランチを新しいリモートにプッシュする
キース・デチャント、ソフトウェアアーキテクト
これは、Gitリポジトリで遭遇した可能性のあるシナリオです。たとえば、古いサーバーからのGitリポジトリの作業コピーがあります。ただし、作業コピーしかないため、オリジンにアクセスできません。だからあなたはそれをフォークすることはできません。ただし、リポジトリ全体とすべてのブランチ履歴を新しいリモートにプッシュする必要があります。
これは、作業コピーに古いリモートからの追跡ブランチ(origin / branch1、origin / branch1など)が含まれている場合に可能です。そうした場合、レポと履歴全体が得られます。
しかし、私の場合は数十の支店があり、その一部またはすべてをローカルでチェックアウトしたことはありませんでした。それらをすべて押すことは重いリフトのように見えました。では、どのように進めますか?
私は2つのオプションを特定しました:
オプション1:すべてのブランチをチェックアウトしてプッシュすることで、これを実行できます。また、Bashスクリプトを作成して支援することもできます。ただし、これを行うと、チェックアウトごとに作業ファイルが変更され、リモート追跡ブランチごとにローカルブランチが作成されます。これは、大きなリポジトリでは遅くなります。
オプション2:作業コピーを変更せずにプッシュする2つ目の方法は、各ブランチのチェックアウトを必要とせず、作業コピーに無関係なブランチを作成せず、作業コピーのファイルを変更することさえありません。
古い、アクティブではなくなったリモートが「oldremote」と呼ばれ、新しいリモートが「newremote」と呼ばれる場合、次のコマンドを使用して、リモート追跡ブランチのみをプッシュできます。
git push newremote refs/remotes/oldremote/*:refs/heads/*
場合によっては、ブランチのサブセットのみをプッシュすることも可能です。ブランチ名がスラッシュで名前空間化されている場合(たとえば、oldremote / features / branch3、oldremote / features / branch4など)、「oldremote/features」で始まる名前のリモートトラッキングブランチのみをプッシュできます。
git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*
すべてのブランチをプッシュする場合でも、一部のブランチをプッシュする場合でも、Gitは、新しいローカルブランチを作成したり、作業ファイルに変更を加えたりすることなく、操作全体を実行します。パターンに一致するすべてのトラッキングブランチが新しいリモートにプッシュされます。
このトピックの詳細については、StackOverflowのこのスレッドをご覧ください。
投稿日:2017年10月9日
origin
構成にハードコーディングしないソリューショングローバルgitconfigで以下を使用します
[remote]
push = +refs/heads/*
push = +refs/tags/*
これにより、すべてのブランチとすべてのタグがプッシュされます
origin
ですか?ハードコーディングする場合:
origin
は、すべてのリポジトリでリモートになります。したがって、原点を追加することはできませんが、を使用する必要がありますset-url
。origin
(ポイント1から)すでに存在しているため、名前の変更は機能しません:)JakubNarębskiの答えによると:
最新のgitでは、常にすべてのブランチをフェッチします(refs / remotes / origin /*名前空間へのリモートトラッキングブランチとして)
まず、リモートgitをloaclに追加します
git remote add remote_name remote_address
そして、あなたが次のコマンドでそれをする必要がある後
git push --all remote_name