Pertanyaan Bagaimana cara mengkloning semua cabang jarak jauh di Git?


Saya punya master dan a development cabang, keduanya didorong ke GitHub. Saya sudah cloned, pulled, dan fetched, 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.


3555
2017-09-15 22:42


asal


Jawaban:


Pertama, klon remote Git repositori dan CD ke dalamnya:

$ git clone git://example.com/myproject
$ cd myproject

Selanjutnya, lihat cabang-cabang lokal di repositori Anda:

$ git branch
* master

Tapi ada cabang lain yang bersembunyi di repositori Anda! Anda dapat melihat ini menggunakan -a bendera:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

Jika Anda hanya ingin mengintip di cabang hulu, Anda dapat memeriksanya secara langsung:

$ git checkout origin/experimental

Tetapi jika Anda ingin bekerja di cabang itu, Anda harus membuat cabang pelacakan lokal yang dilakukan secara otomatis dengan:

$ git checkout experimental

dan kamu akan lihat

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

Kalimat terakhir itu melempar beberapa orang: "Cabang baru" - ya? Maksudnya adalah bahwa cabang diambil dari indeks dan dibuat secara lokal untuk Anda. Itu sebelumnya baris sebenarnya lebih informatif karena memberitahu Anda bahwa cabang sedang diatur untuk melacak cabang terpencil, yang biasanya berarti cabang asal / branch_name

Sekarang, jika Anda melihat cabang lokal Anda, inilah yang akan Anda lihat:

$ git branch
* experimental
  master

Anda sebenarnya dapat melacak lebih dari satu remote repositori menggunakan git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

Pada titik ini, semuanya menjadi sangat gila, jadi larilah gitk untuk melihat apa yang terjadi:

$ gitk --all &

4020
2017-09-16 13:28



Jika Anda memiliki banyak cabang jarak jauh yang ingin Anda ambil sekaligus, lakukan:

$ git pull --all

Sekarang Anda dapat memeriksa cabang apa pun sesuai kebutuhan, tanpa membasmi repositori jarak jauh.


743
2018-01-13 16:42



Ini Pesta skrip membantu saya:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

Ini akan membuat cabang pelacakan untuk semua cabang jarak jauh, kecuali master (yang mungkin Anda dapatkan dari perintah clone asli). Saya pikir Anda mungkin masih perlu melakukan

git fetch --all
git pull --all

untuk memastikan.

Satu liner: 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 di setup Anda sebelum menyalin rm-rf universe seperti yang kita kenal

Kredit untuk satu-liner pergi ke user cfi


379
2018-01-21 02:18



Menggunakan --mirror pilihan tampaknya menyalin remote melacak cabang dengan benar. Namun, ini mengatur repositori sebagai repositori kosong, jadi Anda harus mengubahnya kembali menjadi repositori normal sesudahnya.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

Referensi: Git FAQ: Bagaimana cara mengkloning repositori dengan semua cabang yang dilacak dari jarak jauh?


279
2017-08-27 17:49



Anda dapat dengan mudah beralih ke cabang tanpa menggunakan sintaks "git checkout -b somebranch origin / somebranch". Anda hanya bisa melakukan:

git checkout somebranch

Git secara otomatis akan melakukan hal yang benar:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

Git akan memeriksa apakah sebuah cabang dengan nama yang sama ada di satu remote tertentu, dan jika itu dilakukan, itu melacaknya dengan cara yang sama seperti jika Anda secara eksplisit ditentukan bahwa itu adalah cabang terpencil. Dari halaman manual git-checkout Git 1.8.2.1:

Jika <branch> tidak ditemukan tetapi memang ada cabang pelacakan di   tepat satu remote (sebut saja <remote>) dengan nama yang cocok, perlakukan sebagai   setara dengan

$ git checkout -b <branch> --track <remote>/<branch>

204
2018-05-12 12:11



Mengenai,

$ git checkout -b asal eksperimental / eksperimental

menggunakan

$ git checkout -t origin/experimental

atau lebih verbose tetapi lebih mudah diingat

$ git checkout --track origin/experimental

mungkin lebih baik, dalam hal pelacakan repositori jarak jauh.


88
2017-07-27 06:10



Pengambilan yang Anda lakukan harus mendapatkan semua cabang jarak jauh, tetapi tidak akan membuat cabang lokal untuknya. Jika Anda menggunakan gitk, Anda harus melihat cabang jarak jauh yang dideskripsikan sebagai "remote / origin / dev" atau yang serupa.

Untuk membuat cabang lokal berdasarkan cabang jarak jauh, lakukan sesuatu seperti:

git checkout -b dev refs / remote / origin / dev

Yang seharusnya mengembalikan sesuatu seperti:

Cabang dev mengatur untuk melacak cabang terpencil refs / remote / origin / dev.
Beralih ke cabang baru "dev"

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 itu akan mengambil semua cabang, tetapi hanya tarik yang ada di atas pohon.


77
2017-09-15 22:52



Ketika Anda melakukan "git clone git: // location", semua cabang dan tag diambil.

Untuk bekerja di atas cabang terpencil tertentu, dengan asumsi itu adalah remote asal:

git checkout -b branch origin/branchname

57
2017-09-15 22:47



Gunakan alias. Meskipun tidak ada Git satu baris asli, Anda dapat mendefinisikan sendiri sebagai

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

dan kemudian menggunakannya sebagai

git clone-branches

46
2018-05-15 11:02



Ini tidak terlalu rumit, langkah yang sangat sederhana dan lurus ke depan adalah sebagai berikut;

git fetch origin Ini akan membawa semua cabang jarak jauh ke lokal Anda.

git branch -a Ini akan menunjukkan kepada Anda semua cabang terpencil.

git checkout --track origin/<branch you want to checkout>

Verifikasi apakah Anda berada di cabang yang diinginkan dengan perintah berikut;

git branch

Outputnya akan seperti ini;

*your current branch 
some branch2
some branch3 

Perhatikan tanda * yang menunjukkan cabang saat ini.


43
2017-12-26 10:19



Mengapa Anda hanya melihat "master"

git clone mengunduh semua cabang remote jarak jauh tetapi masih menganggapnya sebagai "remote", meskipun file-file tersebut terletak di repositori baru Anda. Ada satu pengecualian untuk ini, yaitu bahwa proses kloning menciptakan cabang lokal yang disebut "master" dari cabang terpencil yang disebut "master". Secara default, git branch hanya menampilkan cabang lokal, itulah mengapa Anda hanya melihat "master".

git branch -a menunjukkan semua cabang, termasuk cabang-cabang terpencil.


Cara mendapatkan cabang lokal

Jika Anda benar-benar ingin bekerja di cabang, Anda mungkin menginginkan versi "lokal" darinya. Untuk sekadar membuat cabang lokal dari cabang jarak jauh (tanpa memeriksa mereka dan dengan demikian mengubah isi direktori kerja Anda), Anda dapat melakukannya seperti ini:

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

Dalam contoh ini, branchone adalah nama cabang lokal yang Anda buat berdasarkan origin/branchone; jika Anda malah ingin membuat cabang lokal dengan nama berbeda, Anda dapat melakukan ini:

git branch localbranchname origin/branchone

Setelah membuat cabang lokal, Anda bisa melihatnya git branch (ingat, Anda tidak perlu -a untuk melihat cabang lokal).


41
2018-03-05 13:47