it-swarm-id.com

Bagaimana cara mengkloning semua cabang jarak jauh di Git?

Saya memiliki cabang master dan development, keduanya didorong ke GitHub . Saya cloned, pulled, dan fetched, tapi saya tetap tidak bisa mendapatkan apa pun selain cabang master kembali.

Saya yakin saya kehilangan sesuatu yang jelas, tetapi saya telah membaca manual dan saya tidak mendapatkan sukacita sama sekali.

3746
Peter Coulton

Pertama, klon remote Git repository dan cd ke dalamnya:

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

Selanjutnya, lihat cabang lokal di repositori Anda:

$ git branch
* master

Tetapi ada cabang-cabang lain yang bersembunyi di repositori Anda! Anda dapat melihatnya menggunakan flag -a:

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

Jika Anda hanya ingin mengintip 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'

Baris terakhir itu melempar beberapa orang: "Cabang baru" - ya? Baris sebelumnya sebenarnya lebih informatif karena memberi tahu Anda bahwa cabang sedang disiapkan untuk melacak cabang jarak jauh, yang biasanya berarti cabang Origin/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 repositori jarak jauh 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, segalanya menjadi sangat gila, jadi jalankan gitk untuk melihat apa yang terjadi:

$ gitk --all &
4191
emk

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

$ git pull --all

Sekarang Anda dapat checkout cabang apa pun yang Anda butuhkan, tanpa mengenai repositori jarak jauh.

763
Gabe Kopley

Skrip Bash ini 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 klon asli). Saya pikir Anda mungkin masih perlu melakukan 

git fetch --all
git pull --all

untuk memastikan.

One 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 dalam pengaturan Anda sebelum menyalin rm -rf universe seperti yang kita kenal 

Kredit untuk one-liner pergi ke cfi pengguna

388
bigfish

Menggunakan opsi --mirror tampaknya menyalin cabang pelacakan remote dengan benar . Namun, ia mengatur repositori sebagai repositori kosong, jadi Anda harus mengubahnya kembali menjadi repositori normal setelahnya.

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

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

300
Dave

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

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 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:

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

$ git checkout -b <branch> --track <remote>/<branch>
208
Nikos C.

Mengenai,

$ git checkout -b eksperimental Asal/eksperimental

menggunakan

$ git checkout -t Origin/experimental

atau lebih verbose tetapi lebih mudah diingat

$ git checkout --track Origin/experimental

mungkin lebih baik, dalam hal melacak repositori jarak jauh. 

90
murphytalk

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:

git checkout -b ref ref/remote/Asal/dev

Yang seharusnya mengembalikan sesuatu seperti:

Cabang dev diatur untuk melacak ref/remote remote cabang/Asal/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 ia akan mengambil semua cabang, tetapi hanya tarik cabang yang ada di bagian atas pohon.

78
Luuk Paulussen

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

Untuk bekerja di atas cabang jarak jauh tertentu, dengan asumsi itu adalah remote Asal:

git checkout -b branch Origin/branchname
57
elmarco

Gunakan alias. Meskipun tidak ada Git satu-liner asli, Anda dapat mendefinisikannya sendiri

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
49
nobody

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 kepada Anda semua cabang jarak jauh.

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.

44
Sam

Mengapa Anda hanya melihat "master"

git clone mengunduh semua cabang jarak jauh 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 menunjukkan semua cabang, termasuk cabang jarak 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:

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 ingin membuat cabang lokal dengan nama berbeda, Anda bisa melakukan ini:

git branch localbranchname Origin/branchone

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

43
Cerran

Lebih baik terlambat daripada tidak pernah, tetapi di sini adalah cara terbaik untuk melakukan 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 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.

42
Jacob Fike

Lakukan 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: //example.com/myprojectt' mengambil semuanya, bahkan cabang, Anda hanya perlu checkout, lalu cabang lokal Anda akan dibuat.

38
rapher

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

git clone <your_http_url>

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

git branch -a

Dan Anda dapat beralih ke cabang apa pun yang sudah Anda miliki.

git checkout <your_branch_name>

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. 

23
Haimei

git clone seharusnya menyalin seluruh repositori. Coba kloning, lalu jalankan git branch -a. Seharusnya daftar semua cabang. Jika Anda ingin beralih ke cabang "foo" alih-alih "master", gunakan git checkout foo.

22
MattoxBeckman

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 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 alpha software ;-)

Inilah bantuan ketika Anda menjalankan bantuan grb:

 git_remote_branch versi 0.2.6 

 Pemakaian:

 grb buat branch_name [Origin_server] 

 grb mempublikasikan branch_name [Origin_server] 

 grb ganti nama branch_name [Origin_server] 

 grb hapus branch_name [Origin_server] 

 grb track branch_name [Origin_server] 



 Catatan: 
 - Jika Origin_server tidak ditentukan, nama 'Asal' diasumsikan 
 (default git) 
 - Fungsi ganti nama mengubah nama cabang saat ini 

 The menjelaskan meta-command: Anda juga dapat menambahkan setiap perintah dengan 
 Kata kunci 'jelaskan'. Alih-alih mengeksekusi perintah, git_remote_branch 
 Hanya akan menampilkan daftar perintah yang perlu Anda jalankan untuk mencapai 
 Tujuan itu .

 Contoh: 
 grb jelaskan buat 
 grb jelaskan buat my_branch github 

 Semua perintah juga memiliki alias: 
 buat: buat, baru 
 hapus: hapus, hancurkan, bunuh, hapus, rm 
 publish: publish, remotize 
 rename: rename, rn, mv, move 
 track: track, follow, grab, fetch 
19
webmat

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

$ git branch -a

anda bisa memperlihatkan semua cabang repositori, dan dengan perintah

$ git checkout -b branchname Origin/branchname

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:

  1. Langkah pertama

buat folder kosong baru di mesin Anda dan tiru salinan mirror dari folder .git 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 folder .git tersembunyi sekarang yang bisa Anda lihat dengan perintah "ls -alt" dari terminal.

  1. Tahap kedua

alihkan repositori ini dari repositori kosong (kosong) ke repositori biasa dengan mengalihkan nilai boolean "bare" dari konfigurasi git ke false:

$ git config --bool core.bare false
  1. 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. 

$ git reset --hard

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. 

15
FedericoCapaldo

Melihat salah satu jawaban untuk pertanyaan yang saya perhatikan adalah mungkin untuk mempersingkat:

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

Namun waspadalah, jika salah satu cabang jarak jauh dinamai mis. admin_master itu tidak akan diunduh!

Terima kasih kepada bigfish untuk ide orisinalnya

12
Tebe

OK, ketika Anda mengkloning repo Anda, Anda memiliki semua cabang di sana ...

Jika Anda hanya melakukan git branch, mereka agak tersembunyi ...

Jadi jika Anda ingin melihat semua nama cabang, cukup tambahkan --all flag seperti ini:

git branch --all atau git 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 mempermudah apa yang saya katakan:

 git branch --all to get all branches

12
Alireza

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.

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

Untuk mendapatkan klon dengan semua cabang dan tag tetapi juga dengan copy pekerjaan:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master
11
raisercostin
#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/Origin/} $branch
done

Kode ini akan menarik semua kode cabang jarak jauh ke repo lokal.

11
Albert.Qing

Untuk salin-tempel ke baris perintah:

git checkout master ; remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

Untuk lebih mudah diterima:

git checkout master ;
remote=Origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master


Ini akan:

  1. lihat master (sehingga kami dapat menghapus cabang tempat kami berada)
  2. pilih remote untuk checkout (ubah ke remote apa pun yang Anda miliki)
  3. loop melalui semua cabang dari remote kecuali master dan HEAD
    1. hapus cabang lokal (sehingga kami dapat memeriksa cabang yang diperbarui secara paksa)
    2. check out cabang dari remote
  4. lihat master (demi itu)

Berdasarkan answer of VonC .

10
ikaruss

Saya menulis fungsi kecil Powershell ini untuk dapat mengecek semua cabang git saya, yang ada di Origin remote.

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "Origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
}

Lebih banyak fungsi git dapat ditemukan di repo pengaturan git saya

8
gringo_dave

Saya perlu melakukan hal yang persis sama. Ini skrip saya Ruby .

#!/usr/bin/env Ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /Origin\//.match(line)
     remote[line.gsub(/Origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]
8
user43685

Git biasanya (ketika tidak ditentukan) mengambil semua cabang dan/atau tag (ref, 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 yang sebenarnya git fetch lakukan?

Terkadang Anda mungkin memiliki cabang/tag yang tidak terhubung langsung ke yang saat ini, jadi git pull --allgit fetch --all tidak akan membantu dalam kasus itu, tetapi Anda dapat mencantumkannya berdasarkan:

git ls-remote -h -t Origin

dan ambil secara manual dengan mengetahui nama-nama referensi.

Jadi untuk _/mengambil semuanya, coba:

git fetch Origin --depth=10000 $(git ls-remote -h -t Origin)

Parameter --depth=10000 dapat membantu jika Anda telah membuat repositori.

Kemudian periksa kembali semua cabang Anda:

git branch -avv

Jika di atas tidak membantu, Anda perlu menambahkan cabang yang hilang secara manual ke daftar yang dilacak (karena entah bagaimana tersesat):

$ git remote -v show Origin
...
  Remote branches:
    master      tracked

oleh git remote set-branches seperti:

git remote set-branches --add Origin missing_branch

sehingga mungkin muncul di bawah remotes/Origin setelah mengambil:

$ git remote -v show Origin
...
  Remote branches:
    missing_branch new (next fetch will store in remotes/Origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> Origin/missing_branch

Penyelesaian masalah

Jika Anda masih tidak bisa mendapatkan apa pun selain cabang utama, periksa yang berikut ini:

  • Periksa ulang remote Anda (git remote -v), mis. .
    • Validasi bahwa git config branch.master.remote adalah Origin.
    • Periksa apakah Origin menunjuk ke URL yang benar melalui: git remote show Origin (lihat ini post ).
6
kenorb

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.

6
ashes999

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:

git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git Push --all newrepo
git Push --tags newrepo

Metode 2:

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git Push --all newrepo
git Push --tags newrepo
6
Gaui

Gunakan perintah yang dapat Anda ingat

Saya menggunakan Bitbucket, Layanan Hosting Repositori dari Atlassian. Jadi saya mencoba mengikuti dokumen mereka. Dan itu bekerja dengan baik untuk saya. Dengan perintah mudah dan pendek berikut ini, Anda dapat checkout cabang jarak jauh Anda.

Pertama-tama, tirukan repositori Anda, lalu ubah ke folder tujuan. Dan last but not least mengambil dan checkout:

git clone <repo> <destination_folder>
cd <destination_folder>
git fetch && git checkout <branch>

Itu dia. Berikut sedikit contoh dunia nyata:

git clone https://[email protected]/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop

Anda akan menemukan informasi detail tentang perintah-perintah dalam dokumen: Clone Command , Ambil Command , Checkout Command

6
Phil

Berikut adalah perintah satu-baris pendek lain yang Menciptakan cabang lokal untuk semua cabang jarak jauh:

(git branch -r | sed -n '/->/!s#^  Origin/##p' && echo master) | xargs -L1 git checkout

Ini juga berfungsi dengan baik jika pelacakan cabang lokal sudah dibuat . Anda dapat memanggilnya setelah git clone pertama atau kapan saja nanti.

Jika Anda tidak perlu memeriksa cabang master setelah kloning, gunakan 

git branch -r | sed -n '/->/!s#^  Origin/##p'| xargs -L1 git checkout
5
jofel

git clone --mirror pada repo asli berfungsi dengan baik untuk ini.

git clone --mirror /path/to/original.git
git remote set-url Origin /path/to/new-repo.git
git Push -u Origin
3
Bernd Jungblut

Saya akan menambahkan 2 sen saya di sini karena saya tiba di sini mencoba mencari tahu cara menarik cabang jauh yang telah saya hapus secara lokal. Origin bukan milik saya, dan saya tidak ingin repot-repot mengkloning kembali semuanya 

Ini bekerja untuk saya:

dengan asumsi Anda perlu membuat ulang cabang secara lokal:

git checkout -b recreated-branch-name
git branch -a (to list remote branches)
git rebase remotes/remote-Origin/recreated-branch-name

Jadi jika saya pindah dari gituser/master ke sjp dan kemudian bercabang ke sjp/mynewbranch akan terlihat seperti ini:

$ git checkout -b mynewbranch
$ git branch -a
  master
  remotes/sjp/master
  remotes/sjp/mynewbranch
$ git fetch (habit to always do before)
$ git rebase remotes/sjp/mynewbranch
2
Camwyn

Agak terlambat ke pesta, tapi saya pikir ini yang berhasil:

mkdir YourRepo
cd YourRepo
git init --bare .git                       # create a bare repo
git remote add Origin REMOTE_URL           # add a remote
git fetch Origin refs/heads/*:refs/heads/* # fetch heads
git fetch Origin refs/tags/*:refs/tags/*   # fetch tags
git init                                   # reinit work tree
git checkout master                        # checkout a branch

Jika ini melakukan sesuatu yang tidak diinginkan, saya ingin tahu. Namun, sejauh ini, ini berhasil untuk saya.

0
Andy

Variasi ini akan mengkloning repo jarak jauh dengan semua cabang yang tersedia secara lokal tanpa harus checkout masing-masing cabang satu per satu. Tidak diperlukan skrip mewah.

Buat folder dengan nama yang sama dari repo yang ingin Anda tiru dan masukkan misalnya:

mkdir somerepo
cd somerepo

Sekarang lakukan perintah ini tetapi dengan nama pengguna/reponame repo yang sebenarnya 

git clone --bare [email protected]:someuser/somerepo.git .git
git config --bool core.bare false
git reset --hard
git branch

Voiala! Anda memiliki semua cabang di sana!

0
lacostenycoder

Berikut ini adalah skrip bash untuk mengambil semua cabang dan tag proyek git sebagai snapshot ke folder terpisah. 

https://Gist.github.com/hfossli/7562257

Mungkin bukan yang diminta secara langsung, tetapi beberapa orang mungkin datang ke sini mencari solusi ini.

0
hfossli