Saya mengkloning repositori Git, yang berisi sekitar lima cabang. Namun, ketika saya melakukannya git branch
saya hanya melihat salah satunya:
$ git branch
* master
Saya tahu bahwa saya dapat melakukan git branch -a
untuk melihat semua cabang, tetapi bagaimana saya menarik semua cabang secara lokal sehingga ketika saya melakukannya git branch
, ini menunjukkan yang berikut?
$ git branch
* master
* staging
* etc...
git
branch
git-branch
David542
sumber
sumber
--single-branch
pengaturan saat kloning: stackoverflow.com/questions/17714159/… (git fetch --all
tidak akan pernah berfungsi jika Anda hanya menetapkan satu cabang!)git clone --bare <repo url> .git
(perhatikan Anda perlu menambahkan "--bare" dan ".git" pada akhirnya untuk mengkloning repo sebagai "bare" repo), lalugit config --bool core.bare false
(setel flag "bare" menjadi false), lalugit reset --hard
(pindahkan HEAD ke HEAD saat ini pada repo). Sekarang jika Andagit branch
harus melihat semua cabang dari repo yang Anda kloning.Jawaban:
Anda dapat mengambil semua cabang dari semua remote seperti ini:
Ini pada dasarnya adalah langkah kekuatan .
fetch
memperbarui salinan lokal dari cabang jarak jauh sehingga ini selalu aman untuk cabang lokal Anda TETAPI :fetch
tidak akan memperbarui cabang lokal (yang melacak cabang jarak jauh); jika Anda ingin memperbarui cabang lokal Anda, Anda masih perlu menarik setiap cabang.fetch
tidak akan membuat cabang lokal (yang melacak cabang jarak jauh), Anda harus melakukan ini secara manual. Jika Anda ingin mendaftar semua cabang jarak jauh:git branch -a
Untuk memperbarui cabang lokal yang melacak cabang jarak jauh:
Namun, ini masih belum cukup. Ini hanya akan berfungsi untuk cabang lokal Anda yang melacak cabang jarak jauh. Untuk melacak semua cabang jarak jauh, jalankan oneliner ini SEBELUM
git pull --all
:TL; versi DR
(Tampaknya menarik mengambil semua cabang dari semua remote, tapi saya selalu mengambil pertama hanya untuk memastikan.)
Jalankan perintah pertama hanya jika ada cabang jauh di server yang tidak dilacak oleh cabang lokal Anda.
PS AFAIK
git fetch --all
dangit remote update
setara.Kamil Szot ini komentar yang orang telah ditemukan berguna.
sumber
git checkout -b localname remotename/remotebranch
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 "refname 'origin / branchname' ambigu setiap kali saya menyebutnyagit pull --all; for remote in `git branch -r | grep -v \>`; do git branch --track ${remote#origin/} $remote; done
. Perubahan menghapus KEPALA.for /F %remote in ('git branch -r') do ( git branch --track %remote) && git fetch --all && git pull --all
Untuk membuat daftar cabang jarak jauh:
git branch -r
Anda dapat memeriksanya sebagai cabang lokal dengan:
git checkout -b LocalName origin/remotebranchname
sumber
git checkout remotebranchname
dan berfungsi. apa bedanya dengan solusi Anda?git checkout remotebranchname
digunakan untuk hanya membuat cabang baru yang tidak terkait yang bernama remotebranchname .Anda harus membuat cabang lokal yang melacak cabang jarak jauh.
Dengan asumsi bahwa Anda hanya memiliki satu panggilan jarak jauh
origin
, cuplikan ini akan membuat cabang lokal untuk semua yang pelacakan jarak jauh:Setelah itu,
git fetch --all
akan memperbarui semua salinan lokal cabang jauh.Juga,
git pull --all
akan memperbarui cabang pelacakan lokal Anda, tetapi tergantung pada komit lokal Anda dan bagaimana opsi konfigurasi 'gabungan' diatur, itu mungkin membuat komit gabungan, maju-cepat atau gagal.sumber
git pull --all
akan memperbarui semua cabang pelacakan lokal? Sejauh yang saya tahu itu hanya memperbarui cabang saat ini dari semua remote.origin
? Lihat jawaban ini yang akan berfungsi pada semua nama jarak jauh.Jika kamu melakukan:
maka mereka semua akan ada di sana secara lokal. Jika Anda melakukan:
Anda akan melihat mereka terdaftar sebagai remote / asal / nama-cabang. Karena mereka ada di sana secara lokal Anda dapat melakukan apa pun yang Anda suka dengan mereka. Sebagai contoh:
atau
atau
sumber
--all
)git fetch -all
mengambil semua cabang dari semua remote.git fetch origin
mengambil semua cabang remoteorigin
. Yang kemudian adalah apa yang diminta OP.--all
berarti "semua remote", bukan "semua cabang dari remote yang diberikan". Yang terakhir tersirat oleh pengambilan apa pun dari jarak jauh.Ini mengasumsikan semua cabang dilacak.
Jika tidak, Anda dapat memecat ini di Bash:
Kemudian jalankan perintah.
sumber
->
yang kemungkinan akan ada di outputgit branch -r
sebagai `origin / HEAD -> origin / master`Branch 'origin/quote-filenames' set up to track local branch 'master'.
diinginkan adalah:Branch 'quote-filenames' set up to track remote branch 'quote-filenames' from 'origin'.
Ini mundur , mengatur asal untuk melacak remote. Lihat jawaban ini untuk perbaikan.git fetch
tidak akan berfungsi. Jadi pelajaran di sini adalah bahwa Anda perlu melacak cabang-cabang terpencil. Gracias!Bash
for
loop tidak berfungsi untuk saya, tetapi ini melakukan persis apa yang saya inginkan. Semua cabang dari asal saya dicerminkan sebagai nama yang sama secara lokal.Lihat komentar Mike DuPont di bawah ini. Saya pikir saya sedang mencoba melakukan ini pada Server Jenkins yang membuatnya dalam mode kepala terpisah.
sumber
fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
setelah klon sederhana. Harus melepaskan kepala dulu. Saya melakukan ini dengangit checkout <SHA>
git checkout --detach # detach the head
dan kemudiangit fetch origin \'+refs/heads/*:refs/heads/*
Gunakan
git fetch && git checkout RemoteBranchName
.Ini bekerja sangat baik untuk saya ...
sumber
origin/branch
; cukup untuk mengatakan sajabranch
).Ketika Anda mengkloning repositori, semua informasi cabang sebenarnya diunduh tetapi cabang disembunyikan. Dengan perintah itu
Anda bisa memperlihatkan semua cabang repositori, dan dengan perintah
Anda kemudian dapat "mengunduh" secara manual satu per satu.
Namun, ada cara yang jauh lebih bersih dan lebih cepat, meskipun agak rumit. Anda perlu tiga langkah untuk mencapai ini:
Langkah pertama
buat folder kosong baru di mesin Anda dan tiru salinan mirror dari folder .git dari repositori:
repositori lokal di dalam folder my_repo_folder masih kosong, hanya ada folder .git tersembunyi sekarang yang bisa Anda lihat dengan perintah "ls -alt" dari terminal.
Tahap kedua
alihkan repositori ini dari repositori kosong (kosong) ke repositori biasa dengan mengalihkan nilai boolean "bare" dari konfigurasi git ke false:
Langkah ketiga
Raih semua yang ada di dalam folder saat ini dan buat semua cabang pada mesin lokal, oleh karena itu buatlah ini repo yang normal.
Jadi sekarang Anda bisa mengetik perintah
git branch
dan Anda dapat melihat bahwa semua cabang diunduh.Ini adalah cara cepat di mana Anda dapat mengkloning git repositori dengan semua cabang sekaligus, tetapi itu bukan sesuatu yang ingin Anda lakukan untuk setiap proyek dengan cara ini.
sumber
Anda dapat mengambil semua cabang dengan:
atau:
The
--depth=10000
parameter dapat membantu jika Anda sudah shallowed repositori.Untuk menarik semua cabang, gunakan:
Jika di atas tidak berfungsi, maka awali perintah di atas dengan:
karena
remote.origin.fetch
bisa mendukung hanya cabang tertentu saat mengambil, terutama ketika Anda mengkloning repo Anda dengan--single-branch
. Memeriksa ini dengan:git config remote.origin.fetch
.Setelah itu Anda harus dapat melakukan checkout cabang apa pun.
Lihat juga:
Untuk mendorong semua cabang ke remote, gunakan:
akhirnya
--mirror
untuk mencerminkan semua referensi.Jika tujuan Anda adalah untuk menggandakan repositori, lihat: Menggandakan artikel repositori di GitHub.
sumber
depth=1
) dan konfigurasi juga menentukan satu cabang khusus untukfetch
-depth=1000
parameternya adalah perbaikan yang membantu saya untuk checkout cabang jarak jauh tertentupull --all
tidak menarik semua cabang, tetapi semua remoteSaya biasanya tidak menggunakan yang lain selain perintah seperti ini:
Versi sedikit lebih pendek:
sumber
Saya yakin Anda telah mengkloning repositori dengan:
Sekarang buka folder itu menggunakan cd:
Jika Anda mengetik,
git status
Anda dapat melihat semua:Untuk melihat semua jenis cabang tersembunyi:
Ini akan mendaftar semua cabang jarak jauh.
Sekarang jika Anda ingin checkout pada cabang tertentu cukup ketik:
sumber
Jika Anda di sini mencari solusi untuk mendapatkan semua cabang dan kemudian memigrasi semuanya ke server Git lain, saya mengumpulkan proses di bawah ini. Jika Anda hanya ingin mendapatkan semua cabang diperbarui secara lokal, berhenti di baris kosong pertama.
sumber
git fetch git pull
stackoverflow.com/a/292359/1114926pull
memang melakukan yangfetch
pertama tetapi lebih mudah untuk mengetahui apakah masalahnya berasal darifetch
bagianpull
atau bagian selanjutnyamerge
daripull
kapanfetch
dieksekusi secara independen.Setelah Anda mengkloning repositori master, Anda bisa menjalankannya
sumber
Pastikan semua cabang jarak jauh dapat diambil dalam
.git/config
file.Dalam contoh ini, hanya
origin/production
cabang yang dapat diambil, bahkan jika Anda mencoba untuk melakukangit fetch --all
apa pun tidak akan terjadi selain mengambilproduction
cabang:Baris ini harus diganti oleh:
Kemudian jalankan
git fetch
dll ...sumber
git config --get remote.origin.fetch
dan kemudian (secara destruktif) atur:git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
Looping sepertinya tidak bekerja untuk saya dan saya ingin mengabaikan asal / master. Inilah yang bekerja untuk saya.
Setelah itu:
sumber
grep | awk
antipattern :git branch -r | awk -F 'origin/' '!/HEAD|master/{
...Hanya tiga perintah ini yang akan mendapatkan semua cabang:
sumber
pull --all
. Tetapi jika masih diperlukan, maka jawaban lainnya di bawah, oleh @Johnno Nola, dengan asumsi semua cabang dilacak, dicampur dengan jawaban ini, adalah jalan yang harus ditempuh.Mengapa tidak ada yang menjawab pertanyaan mereka dan menjelaskan apa yang terjadi?
Lacak semua cabang jarak jauh:
Lacak semua cabang yang ada di repo jarak jauh.
Lakukan secara manual:
Anda akan mengganti
<branch>
dengan cabang yang ditampilkan dari outputgit branch -r
.Lakukan dengan skrip bash
Perbarui informasi tentang cabang jarak jauh di komputer lokal Anda:
Ini mengambil pembaruan pada cabang dari repo jarak jauh yang Anda lacak dalam repo lokal Anda. Ini tidak mengubah cabang lokal Anda. Repo git lokal Anda sekarang mengetahui hal-hal yang terjadi pada cabang repo jarak jauh. Contohnya adalah bahwa komit baru telah didorong ke master jarak jauh, melakukan pengambilan sekarang akan mengingatkan Anda bahwa master lokal Anda di belakang oleh 1 komit.
Perbarui informasi tentang cabang jarak jauh di komputer lokal Anda dan perbarui cabang lokal:
Apakah pengambilan diikuti oleh gabungan untuk semua cabang dari jarak jauh ke cabang lokal. Contohnya adalah bahwa komit baru telah didorong ke master jarak jauh, melakukan tarik akan memperbarui repo lokal Anda tentang perubahan di cabang jarak jauh dan kemudian akan menggabungkan perubahan itu ke cabang lokal Anda. Ini dapat membuat kekacauan karena menggabungkan konflik.
sumber
Saya menulis naskah kecil untuk mengelola kloning repo baru dan membuat cabang lokal untuk semua cabang terpencil.
Anda dapat menemukan versi terbaru di sini :
Untuk menggunakannya, cukup salin ke direktori git bin Anda (bagi saya, itu
C:\Program Files (x86)\Git\bin\git-cloneall
), lalu, pada baris perintah:Ini klon seperti biasa, tetapi membuat cabang pelacakan lokal untuk semua cabang jarak jauh.
sumber
Cara Mengambil Semua Pelacakan Cabang Git Remote Tunggal.
Ini telah diuji dan berfungsi pada Red Hat dan Git Bash pada Windows 10.
TLDR:
Penjelasan:
Liner satu memeriksa dan kemudian mengambil semua cabang kecuali KEPALA.
Daftar cabang-cabang pelacakan jarak jauh.
Abaikan KEPALA.
Hapus nama cabang dari remote.
Periksa semua cabang yang melacak satu remote.
Ambil untuk cabang keluar.
Secara teknis pengambilan tidak diperlukan untuk cabang lokal baru.
Ini dapat digunakan untuk
fetch
ataupull
cabang yang sama-sama baru dan memiliki perubahan dalam jarak jauh.Pastikan Anda hanya menarik jika Anda siap untuk bergabung.
Pengaturan Tes
Lihat repositori dengan URL SSH.
Sebelum
Periksa cabang di lokal.
Jalankan Perintah
Jalankan one liner.
Setelah
Periksa cabang lokal termasuk cabang jarak jauh.
sumber
Untuk pengguna Windows yang menggunakan PowerShell:
sumber
git branch -r | ForEach-Object { # Skip default branch, this script assumes # you already checked-out that branch when cloned the repo if (-not ($_ -match " -> ")) { $localBranch = ($_ -replace "^.*?/", "") $remoteBranch = $_.Trim() git branch --track "$localBranch" "$remoteBranch" } }
Inilah sesuatu yang saya anggap kuat:
HEAD
untuk melacakorigin/HEAD
origin
Ini tidak perlu
git fetch --all
sebagai passing-all
untukgit pull
meneruskan opsi ini ke internalfetch
.Terima kasih atas jawaban ini .
sumber
Berikut adalah versi Perl dari satu-liner yang disediakan dalam jawaban yang diterima:
git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file
Anda dapat menjalankan file output sebagai skrip Shell jika Anda mau.
Kami menghapus repositori proyek Stash kami secara tidak sengaja. Untungnya seseorang telah membuat garpu tepat sebelum kehilangan yang tidak disengaja. Saya mengkloning garpu ke lokal saya (akan menghilangkan detail bagaimana saya melakukan itu). Begitu saya memiliki garpu sepenuhnya di lokal saya, saya berlari satu baris. Saya memodifikasi URL remote (asal dalam kasus saya) untuk menunjuk ke repositori target yang sedang kami pulihkan ke:
git remote set-url origin <remote-url>
Dan akhirnya mendorong semua cabang ke asal seperti:
git push --all origin
dan kami kembali berbisnis.
sumber
Kita bisa meletakkan semua nama cabang atau tag dalam file sementara, lalu lakukan git pull untuk setiap nama / tag:
sumber
Jika Anda memiliki masalah dengan
fetch --all
maka lacak cabang jarak jauh Anda:sumber
Untuk menghindari pesan kesalahan 'fatal: Cabang bernama' asal / master 'sudah ada.', Anda memerlukan ini:
sumber
Berdasarkan jawaban oleh Learath2, inilah yang saya lakukan setelah melakukan
git clone [...]
dan-cd
masuk ke direktori yang dibuat:git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b
Bekerja untuk saya tetapi saya tidak tahu itu akan berhasil untuk Anda. Hati-hati.
sumber
Sekarang secara lokal milik
yourNewLocalBranchName
AndarequiredRemoteBranch
.sumber
Untuk Pengguna Visual Studio, konsol On Package Manager:
cabang git | % {git mengambil hulu; git menggabungkan upstream / master}
sumber
Telah mencoba banyak cara, hanya yang ini sederhana dan bekerja untuk saya.
sumber
Tetapkan alias: (berdasarkan jawaban atas)
Sekarang untuk melacak semua cabang:
git track-all-branches
sumber