Saya memiliki master
dan development
cabang, keduanya didorong ke GitHub . Saya sudah clone
d, pull
ed, dan fetch
ed, tetapi saya tetap tidak bisa mendapatkan apa pun selain master
cabang kembali.
Saya yakin saya kehilangan sesuatu yang jelas, tetapi saya telah membaca manual dan saya tidak mendapatkan sukacita sama sekali.
git
github
git-branch
git-clone
remote-branch
Peter Coulton
sumber
sumber
git branch -a
) menunjukkan kepada Anda cabang-cabang di remote, tetapi jika Anda mencoba untuk memeriksa salah satu dari mereka, Anda akan berada dalam keadaan 'kepala terpisah'. Jawaban berikutnya turun (sebagian besar upvotes) menjawab pertanyaan yang berbeda (yaitu: bagaimana cara menarik semua cabang, dan, sekali lagi, ini hanya bekerja untuk mereka yang Anda lacak secara lokal). Beberapa komentar menunjukkan bahwa Anda dapat mem-parsinggit branch -a
hasil dengan skrip shell yang secara lokal akan melacak semua cabang jarak jauh. Rangkuman: Tidak ada cara asli git untuk melakukan apa yang Anda inginkan dan itu mungkin bukan ide bagus.scp [email protected]:/home/some_user/project_folder ~
Tidak yakin apakah solusi itu bekerja untuk github ..Jawaban:
Pertama, klon repositori Git jarak jauh dan masukkan ke dalamnya:
Selanjutnya, lihat cabang lokal di repositori Anda:
Tetapi ada cabang-cabang lain yang bersembunyi di repositori Anda! Anda dapat melihat ini menggunakan
-a
flag:Jika Anda hanya ingin mengintip cabang hulu, Anda dapat memeriksanya secara langsung:
Tetapi jika Anda ingin bekerja di cabang itu, Anda harus membuat cabang pelacakan lokal yang dilakukan secara otomatis dengan:
dan kamu akan lihat
Baris terakhir itu melempar beberapa orang: "Cabang baru" - ya? Apa artinya sebenarnya adalah bahwa cabang diambil dari indeks dan dibuat secara lokal untuk Anda. Baris sebelumnya sebenarnya lebih informatif karena memberitahu Anda bahwa cabang sedang disiapkan untuk melacak cabang jarak jauh, yang biasanya berarti cabang asal / branch_name
Sekarang, jika Anda melihat cabang lokal Anda, inilah yang akan Anda lihat:
Anda sebenarnya dapat melacak lebih dari satu repositori jarak jauh menggunakan
git remote
.Pada titik ini, segalanya menjadi sangat gila, jadi lari
gitk
untuk melihat apa yang terjadi:sumber
Jika Anda memiliki banyak cabang jarak jauh yang ingin Anda ambil sekaligus, lakukan:
Sekarang Anda dapat checkout cabang apa pun yang Anda butuhkan, tanpa mengenai repositori jarak jauh.
sumber
git pull --all
akan melakukan hal yang sama - itu tidak akan mengambil dua kali. Dan infosec812 benar bahwa ini tidak menjawab pertanyaan. Saya bertanya-tanya bagaimana ini mendapat begitu banyak upvotes.git remote update
, kemudian mencobagit branch
, saya hanya melihat cabang lokal. Tetapi jika saya melakukannyagit branch -a
saya sekarang dapat melihat cabang-cabang terpencil dan saya dapat melakukangit pull <branchname>
untuk mendapatkan cabang yang saya inginkan. - Saya menerima pertanyaan ini dari pencarian Google, dan jawaban ini menyelesaikan masalah saya.Skrip Bash ini membantu saya:
Ini akan membuat cabang pelacakan untuk semua cabang jarak jauh, kecuali master (yang mungkin Anda dapatkan dari perintah klon asli). Saya pikir Anda mungkin masih perlu melakukan
untuk memastikan.
sumber
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
Seperti biasa: uji dalam pengaturan Anda sebelum menyalinrm -rf universe as we know it
remotes/origin/
untuk melestarikan ruang nama:for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
Menggunakan
--mirror
opsi tampaknya menyalinremote
cabang pelacakan dengan benar. Namun, ini mengatur repositori sebagai repositori kosong, jadi Anda harus mengubahnya kembali menjadi repositori normal setelahnya.Referensi: FAQ Git: Bagaimana saya mengkloning repositori dengan semua cabang yang dilacak dari jarak jauh?
sumber
git checkout
sebagai perintah terakhir untuk akhirnya checkout kepala cabang saat ini pada repo kloning. Ini adalah jawaban yang bagus, sejauh ini yang terbaik. Berani, akhirnya kami akan membawamu ke puncak :-)git remote update
akan melakukannya lagi. Perilaku tarik berubah. Saya kembali percaya bahwa salinan lengkap membutuhkan skrip satu baris.git clone --mirror
sangat baik untuk mencadangkan repositori git Anda ^ _ ^Anda dapat dengan mudah beralih ke cabang tanpa menggunakan sintaks "git checkout -b somebranch origin / somebranch". Anda bisa melakukannya:
Git secara otomatis akan melakukan hal yang benar:
Git akan memeriksa apakah cabang dengan nama yang sama ada di persis satu remote, dan jika ya, itu melacaknya dengan cara yang sama seperti jika Anda secara eksplisit menentukan bahwa itu adalah cabang jarak jauh. Dari halaman manual git-checkout dari Git 1.8.2.1:
sumber
checkout
identik dengan nama cabang jarak jauh, semuanya setelah "/", maka git akan membuat cabang dengan nama yang sama, semuanya setelah "/", "pelacakan" yang jauh ? Dan dengan pelacakan, yang kami maksud:git push
,git pull
, dll akan dilakukan pada remote itu? Jika ini benar, maka perluas jawaban Anda dengan informasi lebih lanjut, karena saya setuju dengan @Daniel, jawaban ini pantas mendapat lebih banyak perwakilan.git checkout --track origin/somebranch
secara eksplisit.Mengenai,
menggunakan
atau lebih verbose tetapi lebih mudah diingat
mungkin lebih baik, dalam hal melacak repositori jarak jauh.
sumber
Pengambilan yang Anda lakukan harus mendapatkan semua cabang jarak jauh, tetapi itu tidak akan membuat cabang lokal untuk mereka. Jika Anda menggunakan gitk, Anda akan melihat cabang jarak jauh yang dijelaskan sebagai "remote / origin / dev" atau yang serupa.
Untuk membuat cabang lokal berdasarkan cabang jarak jauh, lakukan sesuatu seperti:
Yang seharusnya mengembalikan sesuatu seperti:
Sekarang, ketika Anda berada di cabang dev, "git pull" akan memperbarui dev lokal Anda ke titik yang sama dengan cabang dev jarak jauh. Perhatikan bahwa ia akan mengambil semua cabang, tetapi hanya tarik cabang yang ada di bagian atas pohon.
sumber
git checkout -b newlocaldev --track origin/dev
. Jika Anda ingin cabang lokal memiliki nama yang sama dengan yang jauh, dan yang jauh tidak memiliki nama yang rumit, Anda dapat menghilangkan-b newlocaldev
. Dengan pengaturanbranch.autosetupmerge
konfigurasi default , dan dengan asumsi Anda tidak memiliki cabang lokal bernamadev
, kedua perintah ini dapat melakukan hal yang sama:git checkout -b dev origin/dev
dan hanya polosgit checkout dev
. Akhirnya,git checkout origin/dev
tidak membuat cabang baru, tetapi hanya menempatkan Anda dalam keadaan HEAD terpisah.git branch -a
terus mendaftar sebagai cabang jarak jauh.Ketika Anda melakukan "git clone git: // location", semua cabang dan tag diambil.
Untuk bekerja di atas cabang jarak jauh tertentu, dengan asumsi itu adalah asal jarak jauh:
sumber
$ git branch -a
belajar, cabang-cabang terpencil apa yang sudah tersedia.git checkout -b master origin/master
dangit checkout --track origin/master
tolong?Gunakan alias. Meskipun tidak ada Git satu-liner asli, Anda dapat mendefinisikannya sendiri
dan kemudian menggunakannya sebagai
sumber
Mengapa Anda hanya melihat "master"
git clone
mengunduh semua cabang jarak jauh tetapi masih menganggapnya "jauh", meskipun file-file tersebut berada di repositori baru Anda. Ada satu pengecualian untuk ini, yaitu proses kloning membuat cabang lokal yang disebut "master" dari cabang jarak jauh yang disebut "master". Secara default,git branch
hanya menampilkan cabang lokal, itulah sebabnya Anda hanya melihat "master".git branch -a
memperlihatkan semua cabang, termasuk cabang yang jauh .Cara mendapatkan cabang lokal
Jika Anda benar-benar ingin bekerja di cabang, Anda mungkin menginginkan versi "lokal". Untuk hanya membuat cabang lokal dari cabang jarak jauh (tanpa memeriksanya dan dengan demikian mengubah isi direktori kerja Anda) , Anda dapat melakukannya seperti ini:
Dalam contoh ini,
branchone
adalah nama cabang lokal yang Anda buat berdasarkanorigin/branchone
; jika Anda ingin membuat cabang lokal dengan nama berbeda, Anda bisa melakukan ini:Setelah membuat cabang lokal, Anda dapat melihatnya dengan
git branch
(ingat, Anda tidak perlu-a
melihat cabang lokal).sumber
origin/branchone
ada, Anda juga bisa menggunakangit checkout branchone
untuk membuat cabang lokal dengan nama yang sama dan mengaturnya untuk melacak jarak jauh.Ini tidak terlalu rumit, langkah yang sangat sederhana dan lurus adalah sebagai berikut;
git fetch origin
Ini akan membawa semua cabang jarak jauh ke lokal Anda.git branch -a
Ini akan menunjukkan semua cabang jarak jauh.git checkout --track origin/<branch you want to checkout>
Verifikasi apakah Anda berada di cabang yang diinginkan dengan perintah berikut;
Outputnya akan seperti ini;
Perhatikan tanda * yang menunjukkan cabang saat ini.
sumber
Lebih baik terlambat daripada tidak pernah, tetapi di sini adalah cara terbaik untuk melakukan ini:
Pada titik ini Anda memiliki salinan lengkap repo jarak jauh dengan semua cabangnya (verifikasi dengan
git branch
). Anda dapat menggunakan--mirror
alih-alih--bare
jika repo jarak jauh Anda memiliki remote-nya sendiri.sumber
--bare
" Yang disebutkan dalam kalimat terakhir tidak ada dalam daftar perintah yang diberikan.error: key does not contain a section: unset
. Jawaban Dave bekerja lebih baik.git config --unset core.bare
benar-benar ... Bagi saya, ini tampaknya solusi yang bersih dari semua disajikan dalam jawabannya di sini. Sayang sekali memiliki sedikit upvotes ...git config --bool core.bare false
. Inilah mengapa saya merekomendasikan jawaban Dave . Apa pendapat Anda tentang jawaban Dave ? CheersLakukan ini:
Anda lihat, 'git clone git: //example.com/myprojectt' mengambil semuanya, bahkan cabang, Anda hanya perlu checkout, lalu cabang lokal Anda akan dibuat.
sumber
Anda hanya perlu menggunakan "git clone" untuk mendapatkan semua cabang.
Meskipun Anda hanya melihat cabang master, Anda dapat menggunakan "git branch -a" untuk melihat semua cabang.
Dan Anda dapat beralih ke cabang apa pun yang sudah Anda miliki.
Jangan khawatir setelah Anda "git clone", Anda tidak perlu terhubung dengan repo jarak jauh, "git branch -a" dan "git checkout" dapat berjalan dengan sukses ketika Anda menutup wifi Anda. Jadi terbukti bahwa ketika Anda melakukan "git clone", ia sudah menyalin semua cabang dari repo jarak jauh. Setelah itu, Anda tidak perlu repo jarak jauh, lokal Anda sudah memiliki kode semua cabang.
sumber
A
git clone
seharusnya menyalin seluruh repositori. Coba kloning, lalu jalankangit branch -a
. Seharusnya daftar semua cabang. Jika kemudian Anda ingin beralih ke cabang "foo" alih-alih "master", gunakangit checkout foo
.sumber
git clone
memang mengunduh semua cabang jarak jauh, tetapi hanya membuat cabang master lokal. Karenagit branch
hanya menampilkan cabang lokal, Anda perlugit branch -a
melihat cabang jarak jauh juga.Gunakan alat saya git_remote_branch (Anda perlu menginstal Ruby pada mesin Anda). Itu dibangun khusus untuk membuat manipulasi cabang jauh mati mudah.
Setiap kali ia melakukan operasi atas nama Anda, ia mencetaknya dengan warna merah di konsol. Seiring waktu, mereka akhirnya menempel di otak Anda :-)
Jika Anda tidak ingin grb menjalankan perintah atas nama Anda, cukup gunakan fitur 'jelaskan'. Perintah akan dicetak ke konsol Anda alih-alih dieksekusi untuk Anda.
Akhirnya, semua perintah memiliki alias, untuk memudahkan menghafal.
Perhatikan bahwa ini adalah perangkat lunak alfa ;-)
Inilah bantuan ketika Anda menjalankan bantuan grb:
sumber
semua jawaban yang saya lihat di sini valid tetapi ada cara yang jauh lebih bersih untuk mengkloning repositori dan menarik semua cabang sekaligus.
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, ketika Anda ingin mengkloning repo dengan banyak cabang, semua cara yang diilustrasikan di atas panjang dan membosankan sehubungan dengan cara yang jauh lebih bersih dan lebih cepat yang akan saya tunjukkan, meskipun agak rumit. Anda perlu tiga langkah untuk mencapai ini:
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.
alihkan repositori ini dari repositori kosong (kosong) ke repositori biasa dengan mengalihkan nilai boolean "bare" dari konfigurasi git ke false:
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 cukup 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
Kloning dari repo lokal tidak akan berfungsi dengan git clone & git fetch: banyak cabang / tag akan tetap tidak diambil.
Untuk mendapatkan klon dengan semua cabang dan tag.
Untuk mendapatkan klon dengan semua cabang dan tag tetapi juga dengan copy pekerjaan:
sumber
BAIK, ketika Anda mengkloning repo Anda, Anda memiliki semua cabang di sana ...
Jika Anda melakukannya
git branch
, mereka agak tersembunyi ...Jadi jika Anda ingin melihat semua nama cabang, cukup tambahkan
--all
bendera seperti ini:git branch --all
ataugit branch -a
Jika Anda hanya checkout ke cabang, Anda mendapatkan semua yang Anda butuhkan.
Tetapi bagaimana jika cabang dibuat oleh orang lain setelah Anda mengkloning?
Dalam hal ini, lakukan saja:
git fetch
dan periksa semua cabang lagi ...
Jika Anda suka mengambil dan checkout pada saat yang sama, Anda dapat melakukan:
git fetch && git checkout your_branch_name
Juga buat gambar di bawah ini untuk menyederhanakan apa yang saya katakan:
sumber
Melihat salah satu jawaban untuk pertanyaan yang saya perhatikan adalah mungkin untuk mempersingkat:
Namun berhati-hatilah, jika salah satu cabang jarak jauh dinamai eg admin_master tidak akan diunduh!
Terima kasih kepada bigfish untuk ide orisinalnya
sumber
grep
, untuk meningkatkan filter untuk menghindari kesalahan positif.Kode ini akan menarik semua kode cabang jarak jauh ke repo lokal.
sumber
Untuk salin-tempel ke baris perintah:
Untuk lebih mudah diingat:
Ini akan:
Berdasarkan jawaban dari VonC .
sumber
Saya menulis fungsi Powershell kecil ini untuk dapat mengecek semua cabang git saya, yang ada pada remote asal.
Lebih banyak fungsi git dapat ditemukan di repo pengaturan git saya
sumber
Inilah jawaban yang menggunakan awk. Metode ini sudah cukup jika digunakan pada repo baru.
Cabang yang ada hanya akan diperiksa, atau dinyatakan sudah ada di dalamnya, tetapi filter dapat ditambahkan untuk menghindari konflik.
Itu juga dapat dimodifikasi sehingga ia memanggil
git checkout -b <branch> -t <remote>/<branch>
perintah eksplisit .Jawaban ini berikut Nikos C. 's ide .
Sebagai alternatif, kita dapat menentukan cabang jarak jauh sebagai gantinya. Hal ini didasarkan pada murphytalk 's jawaban .
Itu melempar pesan kesalahan fatal pada konflik tapi saya lihat itu tidak berbahaya.
Kedua perintah itu bisa alias.
Menggunakan tidak ada 's jawaban sebagai referensi, kita dapat memiliki perintah berikut untuk membuat alias:
Secara pribadi saya akan menggunakan
track-all
atautrack-all-branches
.sumber
Saya perlu melakukan hal yang persis sama. Ini skrip Ruby saya .
sumber
Tidak satu pun dari jawaban ini yang memotongnya, kecuali pengguna tidak ada di jalur yang benar.
Saya mengalami masalah dengan memindahkan repo dari satu server / sistem ke yang lain. Ketika saya mengkloning repo, itu hanya membuat cabang lokal untuk master jadi ketika saya mendorong ke remote baru, hanya cabang master yang didorong.
Jadi saya menemukan dua metode ini SANGAT berguna. Semoga mereka membantu orang lain.
Metode 1:
Metode 2:
sumber
git clone --mirror
pada repo asli berfungsi dengan baik untuk ini.sumber
Git biasanya (ketika tidak ditentukan) mengambil semua cabang dan / atau tag (referensi, lihat:)
git ls-refs
dari satu atau lebih repositori lainnya bersama dengan objek yang diperlukan untuk melengkapi sejarahnya. Dengan kata lain, ia mengambil objek yang bisa dijangkau oleh objek yang sudah diunduh. Lihat: Apa yanggit fetch
sebenarnya dilakukan?Kadang-kadang Anda mungkin memiliki cabang / tag yang tidak terhubung langsung ke yang saat ini, jadi
git pull --all
/ sayagit fetch --all
tidak akan membantu dalam hal ini, tetapi Anda dapat mendaftar dengan:dan ambil secara manual dengan mengetahui nama-nama referensi.
Jadi untuk mengambil semuanya , coba:
The
--depth=10000
parameter dapat membantu jika Anda sudah shallowed repositori.Kemudian periksa semua cabang Anda lagi:
Jika di atas tidak membantu, Anda perlu menambahkan cabang yang hilang secara manual ke daftar yang dilacak (karena entah bagaimana tersesat):
dengan
git remote set-branches
suka:jadi mungkin muncul di bawah
remotes/origin
setelah mengambil:Penyelesaian masalah
Jika Anda masih tidak bisa mendapatkan apa pun selain cabang utama, periksa yang berikut ini:
git remote -v
), misgit config branch.master.remote
merupakanorigin
.origin
menunjuk ke URL yang benar melalui:git remote show origin
(lihat posting ini ).sumber
Pada awal 2017, jawaban dalam komentar ini berfungsi:
git fetch <origin-name> <branch-name>
membawa cabang ke bawah untuk Anda. Meskipun ini tidak menarik semua cabang sekaligus, Anda bisa menjalankan per-cabang ini secara tunggal.sumber
Berikut ini perintah satu-liner pendek lain yang membuat cabang lokal untuk semua cabang jarak jauh:
Ini juga berfungsi dengan baik jika pelacakan cabang lokal sudah dibuat. Anda dapat memanggilnya setelah yang pertama
git clone
atau beberapa saat kemudian.Jika Anda tidak perlu
master
memeriksa cabang setelah kloning, gunakansumber