Pertanyaan Bagaimana cara mengambil semua cabang git?


Saya mengkloning repositori git, yang berisi sekitar 5 cabang. Namun, ketika saya melakukannya git branch Saya hanya melihat salah satunya:

$ git branch
* master

Saya tahu bahwa saya bisa melakukannya git branch -a untuk melihat semua ranting-rantingnya, tetapi bagaimana saya akan menarik semua cabang di tempat itu sehingga ketika saya melakukannya git branch, itu menunjukkan:

$ git branch
* master
* staging
* etc...

940
2018-04-25 09:05


asal


Jawaban:


Saya telah menulis jawaban saya beberapa waktu lalu dan downvote terakhir memotivasi saya untuk memperbaruinya dengan pengalaman saya di kemudian hari :-)

Edit: versi sebelumnya dari jawaban ini membuat cabang dengan awalan 'asal', semuanya menunjuk ke cabang utama, bukan cabang sebenarnya, dan memiliki masalah dengan perluasan variabel. Ini telah diperbaiki sesuai komentar.

Anda dapat mengambil satu cabang dari semua remote seperti ini:

git fetch --all

fetch memperbarui salinan lokal cabang jarak jauh sehingga ini selalu aman untuk cabang lokal Anda TAPI:

  1. fetch tidak akan memperbarui cabang lokal (yang jalur cabang terpencil); Jika Anda ingin memperbarui cabang lokal Anda, Anda masih perlu menarik setiap cabang.

  2. fetch tidak akan membuat cabang lokal (yang jalur cabang jarak jauh), Anda harus melakukan ini secara manual. Jika Anda ingin membuat daftar semua cabang jarak jauh: git branch -a

Untuk memperbarui cabang lokal yang melacak cabang jarak jauh:

git pull --all

Namun, ini masih belum mencukupi. Ini hanya akan berfungsi untuk cabang lokal Anda yang melacak cabang jarak jauh. Untuk melacak semua cabang jarak jauh menjalankan oneliner ini SEBELUM  git pull --all:

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

Versi TL; DR

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

(sepertinya tarikan itu menjemput semua cabang dari semua remote, tapi aku selalu menjemput dulu hanya untuk memastikan)

Jalankan perintah pertama hanya jika ada cabang jarak jauh di server yang tidak dilacak oleh cabang lokal Anda.

P.S. AFAIK git fetch --all dan git remote update ekuivalen.



Kamil Szot komentar, yang 74 (setidaknya) orang menemukan berguna.

Saya harus menggunakan:

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

karena kode Anda membuat cabang lokal bernama origin/branchname dan   Saya mendapatkan "nama refname '/ nama cabang" adalah ambigu setiap kali saya   merujuk padanya.


1261
2018-04-25 09:10



Untuk mencantumkan cabang jarak jauh:
git branch -r 

Anda dapat memeriksanya sebagai cabang lokal dengan:
git checkout -b LocalName origin/remotebranchname


419
2018-04-25 10:00



Anda perlu membuat cabang lokal yang melacak cabang jarak jauh.

Dengan asumsi Anda hanya memiliki satu remote yang disebut origin, potongan ini akan membuat cabang lokal untuk semua pelacakan jarak jauh:

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

Setelah itu, git fetch --all akan memperbarui semua salinan lokal dari cabang jarak jauh.

Juga, git pull --all akan memperbarui cabang pelacakan lokal Anda, tetapi tergantung pada komit lokal Anda dan bagaimana opsi konfigurasi 'gabung' disetel, hal itu mungkin membuat komitmen gabungan, maju cepat atau gagal.


159
2018-01-17 15:33



Jika kamu melakukan:

git fetch origin

maka mereka semua akan ada di sana secara lokal. Jika Anda kemudian melakukan:

git branch -a

Anda akan melihat mereka terdaftar sebagai remote / origin / branch-name. Karena mereka ada di sana, Anda dapat melakukan apa pun yang Anda sukai bersama mereka. Sebagai contoh:

git diff origin/branch-name 

atau

git merge origin/branch-name

atau

git checkout -b some-branch origin/branch-name

96
2018-04-25 13:52



$ git remote update  
$ git pull --all

Ini mengasumsikan semua cabang dilacak

jika mereka tidak Anda dapat memecat ini di bash

for remote in `git branch -r `; do git branch --track $remote; done

Kemudian jalankan perintah.


42
2018-04-25 09:07



bagaimana dengan git fetch && git checkout RemoteBranchName ? bekerja sangat baik untukku ...


34
2018-05-08 16:14



Bash for loop tidak bekerja untuk saya, tetapi ini melakukan apa yang saya inginkan. Semua cabang dari asal saya dicerminkan sebagai nama yang sama secara lokal.

git fetch origin '+refs/heads/*:refs/heads/*'

27
2017-10-28 20:02