39

すべてのリモート ブランチを自分のリポジトリにプルするにはどうすればよいですか?

私が入力した場合:

git branch -a

ブランチの長いリストを取得しますが、次のように入力すると:

git branch 

私はそれらのうちの2つだけを見ます。

すべてのブランチをローカル リストに取り込むにはどうすればよいですか?

私はできることを知っています:

git checkout --track origin/branch-name

ただし、一度に 1 つのブランチのみをプルしてチェックアウトします。何度も何度も実行するという面倒な作業をせずに、すべてを一度に完了する方法はgit checkout --track origin/branch-nameありますか?


ps。次のコマンドを試しましたが、git branchリストにリモートブランチが表示されることはありませんでした:

git fetch --all
git remote update
git pull --all
4

4 に答える 4

21

たとえば、この説明を読んでください http://git-scm.com/book/en/Git-Branching-Remote-Branches

まず、いくつかの git 用語を明確にしましょう。

  • fetch: リモート リポジトリからコンテンツ (または更新) を取得する
  • pull: フェッチ (上記のように) と 1 つのステップでのマージ

元の投稿者はマージについて言及していなかったので、適切な git 用語で言えば、「リモート リポジトリからすべてのブランチを git fetch してください」と尋ねたかったのかもしれません。

ブランチが表示git branch -aされている場合は、すでにそれらを取得しています。コマンドを与えることでこれを確認できますgit show remotes/origin/some-branch:some-file

または、例えば行うことができますgit diff remotes/origin/some-branch master

あなたもそれらをチェックアウトすることができますgit checkout remotes/origin/some-branch

(確実にネットワーク ケーブルを取り外して、リモート リポジトリに接続しなくてもコマンドが機能することを確認してください。)

remotes/... という名前のブランチはリモート ブランチと呼ばれますが、既にリポジトリにフェッチされています。それらは読み取り専用であり、変更することはできません (そのため、チェックアウト時にメッセージが表示されます)。これらは最後のフェッチまたはプル操作時のリモート リポジトリの状態を反映していますが、実際にはローカルに保存されています。

そうしgit checkout some-branch、some-branch がまだ存在しないが、remotes/origin/some-branch が存在する場合、git は some-branch という名前の追跡ブランチを作成します (1)。繰り返しますが、これはローカル操作であり、すべてのデータが以前にフェッチされています (または、最近フェッチしていない場合は、廃止されたバージョンで作業を開始します)。元々、トラッキング ブランチの内容はリモート ブランチと同じです。ただし、追跡ブランチはローカルで変更できます。

git 作業領域には、一度に 1 つのブランチの状態が含まれます。したがって、すべてのリモート ブランチを一度にチェックアウトするという質問は、git のコンテキストでは意味がありません。それらを次々にチェックアウトできます。ただし、次のものをチェックアウトするたびに、前のものは作業領域から消えます。もちろん、この操作は、すべてのリモート git ブランチをローカル ブランチとして追跡するに示すようにスクリプト化できます。

リモートブランチはリモートにのみ保存され、ローカルには保存されず、すべてがローカルであることを確認したかっただけであると仮定すると、誤解が原因で質問が発生する可能性がありますか? 一度に複数のブランチをチェックアウトしたい場合は、リポジトリをローカルに複製し、異なるブランチを異なる作業領域にチェックアウトできます。(2)

手短に: リモートリポジトリにあるすべてのデータをローカルで利用できるようにしたい場合は、git fetch [repo]. 構成を微調整していない限り、これはすべてのブランチを取得します。つまり、既存のリモート ブランチを更新し、該当する場合は新しいリモート ブランチを作成します。

(1) これは単純な標準的な場合に当てはまります。複数のリモートまたは手動で構成されたリモートを使用するより複雑なケースでは、必要なものを正確に指定するために --track オプションが必要になる場合があります。

git worktree(2)このユースケースには新しい機能があります。ただし、2018 年初頭の時点では、まだ実験的とマークされています

于 2013-09-19T12:44:14.483 に答える
8

私はいつもこれを使用してきましたが、完璧に機能します

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
于 2018-03-16T11:29:18.653 に答える
3

次のようなものを試してください:-

$ git fetch --all
$ for branch in `git branch -r | cut -d '/' -f2-` ; do git checkout $branch && git pull origin $branch ; done
于 2016-05-24T15:22:06.980 に答える