Cara untuk mengkloning semua remote cabang di Git?

Saya memiliki master dan pembangunan cabang, baik didorong ke GitHub. I've clone ' d,pull indonesia, dan ambil indonesia, tapi saya tetap tidak mendapatkan apa-apa selainmaster` cabang kembali.

I'm yakin aku'm hilang sesuatu yang jelas, tapi saya telah membaca manual dan I'm tidak mendapatkan sukacita sama sekali.

Mengomentari pertanyaan (12)
Larutan

Pertama, clone remote Git repositori dan cd ke dalamnya:

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

Selanjutnya, melihat cabang-cabang lokal di repositori anda:

$ git branch
* master

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

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

Jika anda hanya ingin mengambil mengintip cepat di hulu cabang, anda dapat memeriksanya secara langsung:

$ git checkout origin/experimental

Tapi jika anda ingin bekerja di cabang itu, anda'll butuhkan untuk membuat lokal pelacakan cabang yang dilakukan secara otomatis oleh:

$ git checkout experimental

dan anda akan melihat

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

Baris terakhir itu melempar beberapa orang: "cabang Baru" hah? Apa itu benar-benar berarti adalah bahwa cabang ini diambil dari index dan dibuat secara lokal untuk anda. Yang previous garis sebenarnya lebih informatif seperti ini memberitahu anda bahwa cabang yang dibentuk untuk melacak cabang terpencil, yang biasanya berarti asal/branch_name cabang

Sekarang, jika anda melihat cabang lokal anda, ini adalah apa yang anda'll melihat:

$ git branch
* experimental
  master

Anda benar-benar 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, hal-hal yang cukup gila, jadi lari gitk untuk melihat apa yang's terjadi:

$ gitk --all &
Komentar (25)

Jika anda memiliki banyak cabang yang anda ingin mengambil sekaligus, lakukan:

$ git pull --all

Sekarang anda dapat checkout setiap cabang yang anda butuhkan untuk, tanpa memukul remote repositori.

Komentar (13)

Ini Bash script membantu saya keluar:

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

Itu akan membuat cabang pelacakan untuk semua cabang, kecuali master (yang mungkin anda dapatkan dari klon asli command). Saya pikir anda mungkin masih perlu melakukan

git fetch --all
git pull --all

untuk memastikan.

salah Satu kapal: git branch -a | grep -v KEPALA | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && tidak $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs Seperti biasa: tes di setup anda sebelum menyalin rm -rf alam semesta seperti yang kita kenal

Kredit untuk satu-kapal pergi untuk pengguna cfi

Komentar (11)

Menggunakan --cermin pilihan tampaknya untuk menyalin remote pelacakan cabang-cabang dengan baik. Namun, set up repositori sebagai bare repository, jadi anda harus mengubahnya kembali menjadi normal repositori setelah itu.

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 menduplikasi sebuah repositori dengan semua jarak jauh dilacak cabang?

Komentar (13)

Anda dapat dengan mudah beralih ke cabang tanpa menggunakan fancy "git checkout -b somebranch asal/somebranch" sintaks. Anda hanya dapat 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 dalam satu remote, dan jika tidak, itu trek itu dengan cara yang sama seperti jika anda telah secara eksplisit ditentukan bahwa's remote branch. Dari git checkout halaman Git 1.8.2.1:

Jika <cabang> tidak ditemukan, tapi di sana tidak ada pelacakan cabang di tepat satu remote (sebut saja <remote>) dengan pencocokan nama, perlakukan sebagai setara dengan

$ git checkout -b --track /

Komentar (5)

Mengenai,

$ git checkout -b eksperimental asal/eksperimental

menggunakan

$ git checkout -t origin/experimental

atau lebih verbose tapi lebih mudah untuk diingat

$ git checkout --track origin/experimental

mungkin akan lebih baik, dalam hal pelacakan remote repositori.

Komentar (1)

Ambil yang anda lakukan harus mendapatkan semua remote cabang, tapi itu tidak't membuat cabang-cabang lokal untuk mereka. Jika anda menggunakan gitk, anda harus melihat remote cabang digambarkan sebagai "remote/asal/dev" atau sesuatu yang serupa.

Untuk membuat sebuah cabang lokal yang berbasis pada remote cabang, melakukan sesuatu seperti:

git checkout -b dev ref/remote/asal/dev
Yang harus kembali sesuatu seperti:
Cabang dev diatur untuk melacak jarak jauh cabang ref/remote/asal/dev.
Beralih ke cabang baru "dev"
Sekarang, ketika anda berada di dev cabang, "git pull" akan memperbarui lokal dev ke titik yang sama sebagai remote dev cabang. Perhatikan bahwa itu akan mengambil semua cabang, tapi hanya menarik anda ke atas pohon.
Komentar (4)

Ketika anda melakukan "git clone git://lokasi", semua cabang dan tag yang diambil.

Dalam rangka untuk bekerja di atas spesifik cabang terpencil, dengan asumsi itu's asal remote:

git checkout -b branch origin/branchname
Komentar (4)

Menggunakan alias. Meskipun ada't setiap asli Git satu-liners, anda dapat menentukan 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
Komentar (0)

Kenapa anda hanya melihat "master"

git clone download semua remote remote cabang tetapi masih menganggap mereka "remote", meskipun file-file tersebut terletak di repositori baru. Ada's satu pengecualian untuk ini, yaitu bahwa proses kloning menciptakan sebuah cabang lokal yang disebut "master" dari remote cabang yang disebut "master". Secara default, git branch hanya menunjukkan cabang-cabang di daerah, yang mengapa anda hanya melihat "master".

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


Bagaimana untuk mendapatkan cabang-cabang lokal

Jika anda benar-benar ingin bekerja di cabang, anda'll mungkin ingin "lokal" versi ini. Untuk membuat cabang-cabang lokal dari remote cabang (tanpa memeriksa mereka dan dengan demikian mengubah isi dari 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 sebuah cabang lokal anda're menciptakan berdasarkan asal/branchone; jika anda ingin membuat cabang-cabang lokal dengan nama yang berbeda, anda dapat melakukan ini:

git branch localbranchname origin/branchone

Setelah anda've menciptakan sebuah cabang lokal anda, anda dapat melihatnya dengan git branch (ingat, anda don't perlu -a untuk melihat cabang-cabang lokal).

Komentar (1)

Ini isn't terlalu rumit, sangat sederhana dan lurus ke depan langkah-langkah adalah sebagai berikut;

git fetch asal Ini akan membawa semua cabang lokal anda.

git branch -a Ini akan menunjukkan kepada anda semua cabang.

git checkout --melacak asal/<cabang yang ingin anda pelajari>

Memverifikasi apakah anda berada di cabang yang diinginkan dengan perintah berikut;

git branch

Output akan seperti ini;

*your current branch 
some branch2
some branch3 

Perhatikan tanda * tanda yang menunjukkan arus cabang.

Komentar (4)

Lebih baik terlambat daripada tidak, tapi di sini adalah cara terbaik untuk melakukan hal ini:

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

Pada titik ini anda memiliki salinan lengkap dari remote repo dengan semua itu's cabang (verifikasi dengan git branch). Anda dapat menggunakan --cermin bukan - telanjang jika anda remote repo telah remote sendiri.

Komentar (8)

Hanya melakukan ini:

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

Anda lihat, 'git clone git://contoh.com/myprojectt' mengambil semuanya, bahkan cabang-cabang, anda hanya perlu checkout mereka, maka cabang lokal anda akan dibuat.

Komentar (0)

Anda hanya perlu menggunakan "git clone" untuk mendapatkan semua cabang-cabang.

git clone 

Meskipun anda hanya melihat master cabang, anda dapat menggunakan "git branch - " untuk melihat semua cabang-cabang.

git branch -a

Dan anda dapat beralih ke setiap cabang yang sudah anda miliki.

git checkout 

Don't khawatir bahwa setelah anda "git clone", anda don't perlu untuk menghubungkan dengan remote repo, "git branch - " dan "git checkout " ini dapat berjalan dengan sukses ketika anda menutup wifi anda. Jadi hal ini membuktikan bahwa ketika anda melakukan "git clone", itu sudah disalin semua cabang dari remote repo. Setelah itu, anda don't perlu remote repo, lokal anda sudah memiliki semua cabang' kode.

Komentar (3)

A git clone seharusnya untuk menyalin seluruh repositori. Coba kloning itu, dan kemudian jalankan git branch -a. Itu harus daftar semua cabang-cabang. Jika kemudian anda ingin beralih ke cabang "anu" bukan "master", menggunakan git checkout foo.

Komentar (5)

Menggunakan alat git_remote_branch (anda perlu menginstal Ruby di komputer anda). It's dibangun khusus untuk membuat remote branch manipulasi mati mudah.

Setiap kali ia melakukan operasi atas nama anda, mencetak dalam warna merah di konsol. Seiring waktu, mereka akhirnya tetap ke otak anda :-)

Jika anda don't ingin grb untuk menjalankan perintah atas nama anda, hanya menggunakan 'menjelaskan' fitur. Perintah yang akan dicetak ke konsol anda bukan dieksekusi untuk anda.

Akhirnya, semua perintah alias, untuk membuat lebih mudah menghafal.

Catatan bahwa ini adalah alpha software ;-)

Berikut ini's bantuan ketika anda menjalankan grb membantu:

git_remote_branch versi 0.2.6

Penggunaan:

grb membuat branch_name [origin_server]

grb mempublikasikan branch_name [origin_server]

grb mengubah nama branch_name [origin_server]

grb menghapus branch_name [origin_server]

grb lagu branch_name [origin_server]

Catatan:

  • Jika origin_server tidak ditentukan, nama 'asal' ini diasumsikan (git's default)
  • Mengubah nama fungsi mengganti nama saat ini cabang

Menjelaskan meta-perintah: anda juga dapat menambahkan perintah dengan kata kunci 'menjelaskan'. Alih-alih menjalankan perintah, git_remote_branch hanya akan menampilkan daftar perintah yang anda butuhkan untuk menjalankan untuk mencapai tujuan itu.

Contoh: grb menjelaskan membuat grb menjelaskan membuat my_branch github

Semua perintah juga memiliki alias: membuat: buat, baru delete: menghapus, menghancurkan, membunuh, menghilangkan, rm publish: mempublikasikan, remotize rename: mengubah nama, rn, mv, bergerak track: jalur, ikuti, ambil, ambil

Komentar (2)

semua jawaban yang saya lihat di sini adalah valid, tetapi ada banyak cara yang lebih bersih untuk menduplikasi sebuah repositori dan untuk menarik semua cabang sekaligus.

Ketika anda menduplikasi sebuah repositori semua informasi dari cabang-cabang adalah benar-benar download tapi cabang-cabang yang tersembunyi. Dengan perintah

$ git branch -a

anda dapat menampilkan semua cabang-cabang dari repositori, dan dengan perintah

$ git checkout -b branchname origin/branchname

anda kemudian dapat "download" mereka secara manual satu per satu.


Namun, ketika anda ingin clone repo dengan banyak cabang semua cara-cara yang digambarkan di atas adalah panjang dan membosankan dalam hal yang jauh lebih bersih dan cara yang lebih cepat yang akan saya tampilkan, meskipun itu's sedikit rumit. Anda perlu tiga langkah untuk mencapai hal ini:

  1. Langkah pertama

membuat folder baru pada mesin anda dan clone cermin salinan .git folder dari repositori:

$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git

repositori lokal di dalam folder my_repo_folder masih kosong, hanya ada yang tersembunyi .git folder sekarang anda bisa melihat dengan "ls -alt" perintah dari terminal.

  1. Langkah kedua

beralih repositori ini dari kosong (bare) repositori untuk reguler repositori dengan mengganti nilai boolean "telanjang" dari git konfigurasi palsu:

$ git config --bool core.bare false
  1. Langkah Ketiga

Ambil segala sesuatu yang di dalam folder saat ini dan membuat semua cabang pada mesin lokal, sehingga membuat hal ini normal repo.

$ git reset --hard

Jadi sekarang anda bisa ketik perintah "git branch" dan anda dapat melihat bahwa semua cabang di-download.

Ini adalah cara cepat di mana anda dapat menduplikasi sebuah repositori git dengan semua cabang-cabang sekaligus, tapi itu's tidak sesuatu yang anda ingin lakukan untuk setiap proyek dengan cara ini.

Komentar (2)

Kloning dari repo lokal tidak akan bekerja dengan git clone & git fetch: banyak cabang/kategori akan tetap unfetched.

Untuk mendapatkan klon dengan semua cabang-cabang dan tag.

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

Untuk mendapatkan klon dengan semua cabang-cabang dan kategori, tetapi juga dengan kerja copy:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master
Komentar (0)

OK, ketika anda clone repo, anda memiliki semua cabang yang ada...

Jika anda hanya melakukan git branch, mereka adalah jenis yang tersembunyi...

Jadi jika anda'd ingin melihat semua cabang nama, hanya cukup tambahkan --semua bendera seperti ini:

git branch --semua atau git branch -a

Jika anda hanya checkout ke cabang, anda mendapatkan semua yang anda butuhkan.

Tapi bagaimana jika cabang yang dibuat oleh orang lain setelah anda clone?

Dalam hal ini, lakukan:

git fetch

dan memeriksa semua cabang lagi...

Jika anda ingin mengambil dan checkout pada saat yang sama, anda dapat melakukan:

git fetch && git checkout your_branch_name

Juga dibuat gambar di bawah ini untuk anda untuk menyederhanakan apa yang saya katakan:

Komentar (1)

Melihat pada salah satu jawaban untuk pertanyaan saya melihat bahwa itu's mungkin untuk mempersingkat masa itu:

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

Tapi hati-hati, jika salah satu cabang yang disebut sebagai misalnya admin_master itu tidak't bisa di-download!

Terima kasih untuk bigfish untuk ide asli

Komentar (3)