Kako klonirati sve udaljene grane u Git-u?

Imam master granu i development podružnicu koja se nalazi na GitHubu . Ja sam clone d, pull i fetch , ali ne mogu dobiti ništa osim master grane.

Siguran sam da mi nedostaje nešto očito, ali pročitao sam priručnik i ne radujem se.

3676
16 сент. postavio Peter Coulton 16. rujna 2008-09-16 01:42 '08 u 1:42 2008-09-16 01:42
@ 35 odgovora
  • 1
  • 2

Prvo klonirajte udaljeno Git spremište i uđite u njega:

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

Zatim pregledajte lokalne ogranke u vašem spremištu:

 $ git branch * master 

Ali druge grane se skrivaju u vašem spremištu! Možete ih vidjeti koristeći zastavicu -a :

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

Ako želite brzo pogledati gornju granu, možete je provjeriti izravno:

 $ git checkout origin/experimental 

Ali ako želite raditi s ovom granom, morate stvoriti lokalnu granu za praćenje koja će se izvršiti automatski:

 $ git checkout experimental 

i vidjet ćete

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

Ova posljednja linija baca neke ljude: "Nova grana" - da? Zapravo, to znači da je grana preuzeta iz indeksa i kreirana lokalno za vas. Prethodni redak je zapravo više informativan jer vam govori da je grana konfigurirana za praćenje udaljene grane, što obično znači granu podrijetla / grane

Sada, ako pogledate svoje lokalne podružnice, to ćete vidjeti:

 $ git branch * experimental master 

Zapravo, možete pratiti više udaljenih spremišta s 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 

U ovom trenutku, stvari postaju prilično lude, pa pokrenite gitk da vidite što će se dogoditi:

 $ gitk --all > 
4132
16 сент. odgovor je dao emk na 16 sep . 2008-09-16 16:28 '08 u 16:28 2008-09-16 16:28

Ako imate mnogo udaljenih grana koje želite odmah dobiti, pokrenite:

 $ git pull --all 
border=0

Sada možete provjeriti bilo koju granu po potrebi, a da ne dođete do udaljenog spremišta.

750
13 янв. Odgovor je dao Gabe Kopley 13. siječnja. 2011-01-13 19:42 '11 u 19:42 2011-01-13 19:42

Ova bash skripta mi je pomogla:

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

To će stvoriti praćenje grane za sve udaljene grane, osim majstora (koji ste vjerojatno dobili od izvorne klon naredbe). Mislim da još trebaš učiniti

 git fetch --all git pull --all 

da budem siguran.

Jedna obloga : 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 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 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 Kao i obično: test u postavi prije kopiranja rm -rf svemira kakvog poznajemo

Krediti za jedan liner idu korisniku cfi

382
21 янв. odgovor je dao bigfish 21. siječnja 2011-01-21 05:18 '11 u 5:18 2011-01-21 05:18

Upotreba opcije --mirror ispravno kopira remote grane. Međutim, instalira spremište kao otvoreno spremište, pa ga zatim morate vratiti u regularno spremište.

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

Link: Git Često postavljana pitanja: Kako klonirati spremište sa svim daljinski nadziranim granama?

290
27 авг. odgovor je dan Dave 27 aug. 2011-08-27 20:49 '11 u 20:49 2011-08-27 20:49

Lako se možete prebaciti na granu bez upotrebe "git checkout -b somebranch origin / somebranch". Možete jednostavno:

 git checkout somebranch 

Git će automatski učiniti pravu stvar:

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

Git će provjeriti postoji li podružnica s istim imenom u točno jednom udaljenom uređaju, a ako je tako, prati je na isti način kao da ste eksplicitno naznačili da je to udaljena grana. Na stranici git-checkout Git 1.8.2.1 stranica:

Ako <branch> nije pronađen, ali postoji grana za praćenje do točno jednog daljinskog (nazovite ga <remote>) s odgovarajućim imenom, razmislite o tome koliko je ekvivalentan

 $ git checkout -b <branch> --track <remote>/<branch> 
208
12 мая '12 в 15:11 2012-05-12 15:11 odgovor je dao Nikos C. 12. svibnja '12 u 15:11 2012-05-12 15:11

oko

$ git checkout -b eksperimentalno podrijetlo / eksperimentalno

koristeći

 $ git checkout -t origin/experimental 

ili detaljnije, ali jednostavnije za pamćenje

 $ git checkout --track origin/experimental 

možda bolje u smislu praćenja udaljenog repozitorija.

89
27 июля '09 в 9:10 2009-07-27 09:10 odgovor je dat murphytalk 27. srpnja '09 u 9:10 2009-07-27 09:10

Vaš bi izbor trebao primati sve udaljene grane, ali za njih nisu stvorene lokalne podružnice. Ako koristite gitk, trebali biste vidjeti udaljene grane opisane kao "remotes / origin / dev" ili nešto slično.

Da biste stvorili lokalnu podružnicu na temelju udaljene grane, učinite nešto poput:

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

Što bi trebalo vratiti nešto poput:

  Podružnica ref postaviti za praćenje udaljenih ogranaka ogranak / remotes / izvor / dev. Prebacivanje na novu "dev" granu 

Sada kada se nalazite u grani dev, git pull će ažurirati lokalnog razvojnog programera na istu točku kao i udaljeni ogranak. Imajte na umu da će izvući sve grane, ali samo izvucite onu koja je na vrhu stabla.

77
16 сент. Odgovori Luuk Paulussen 16. ruj 2008-09-16 01:52 '08 u 1:52 am 2008-09-16 01:52

Kada radite "git clone git: // location", sve grane i oznake su ekstrahirane.

Da biste radili na određenoj udaljenoj grani, pretpostavimo da je to daljinski upravljač:

 git checkout -b branch origin/branchname 
57
16 сент. odgovor je dao elmarco na 16 sep . 2008-09-16 01:47 '08 u 1:47 2008-09-16 01:47

Koristite aliase. Iako ne postoje izvorne Git jednostruke linije, možete definirati vlastite kao

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

i onda ga upotrijebite

 git clone-branches 
48
15 мая '13 в 14:02 2013-05-15 14:02 odgovor nije dao nitko 15. svibnja '13. u 14:02 sati 2013-05-15 14:02

To nije previše komplicirano, vrlo jednostavni i jednostavni koraci su sljedeći:

git fetch origin To će uzrokovati da sve udaljene grane budu lokalne.

git branch -a Ovo će vam pokazati sve udaljene grane.

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

Provjerite jeste li u pravoj grani sljedećom naredbom:

 git branch 

Rezultat će biti:

 *your current branch some branch2 some branch3 

Primijetite * znak za trenutnu granu.

44
26 дек. odgovor je dan Sam 26. prosinca 2013-12-26 13:19 '13 u 13:19 2013-12-26 13:19

Zašto vidite samo "majstora"

git clone preuzima sve udaljene grane izbrisane, ali ih još uvijek smatra "udaljenim", iako su datoteke u vašem novom spremištu. Postoji jedna iznimka, a to je da proces kloniranja stvara lokalnu granu nazvanu "master" iz udaljene grane koja se zove "master". Prema zadanim postavkama git branch prikazuje samo lokalne ogranke, tako da vidite samo "master".

git branch -a pokazuje sve grane, uključujući i udaljene grane.


Kako dobiti lokalne podružnice

Ako doista želite raditi s podružnicom, vjerojatno ćete trebati "lokalnu" verziju. Da biste jednostavno stvorili lokalne ogranke iz udaljenih grana (bez provjere i mijenjanja sadržaja radnog direktorija), možete to učiniti na sljedeći način:

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

U ovom primjeru, branchone je naziv lokalne grane koju kreirate na temelju origin/branchone ; ako želite stvoriti lokalne podružnice s različitim imenima, možete to učiniti:

 git branch localbranchname origin/branchone 

Kada stvorite lokalnu granu, možete je vidjeti pomoću git branch (ne zaboravite da ne trebate vidjeti lokalne podružnice).

43
05 марта '14 в 16:47 2014-03-05 16:47 odgovor je dao Cerran 05. ožujka 2014. u 16:47 2014-03-05 16:47

Bolje kasno nego nikad, ali ovdje je najbolji način da to učinite:

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

U ovoj fazi imate potpunu kopiju daljinskog repoa sa svim svojim granama (provjerite s git branch ). Možete koristiti --mirror umjesto --bare ako vaš daljinski repo ima svoje konzole.

40
27 нояб. odgovor je dao Jacob Fike 27. studenog. 2012-11-27 02:42 '12 u 2:42 2012-11-27 02:42

Samo učinite sljedeće:

 $ 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 

Možete vidjeti da git clone git: //example.com/myprojectt izdvaja sve, čak i grane, samo ih trebate provjeriti, tada će se stvoriti vaša lokalna podružnica.

38
31 мая '11 в 14:40 2011-05-31 14:40 odgovor je dao rapher 31. svibnja '11 u 14:40 2011-05-31 14:40

Morate koristiti "git klon" da biste dobili sve grane.

 git clone <your_http_url> 

Čak i ako vidite samo granu čarobnjaka, možete koristiti "git branch -a" da biste vidjeli sve grane.

 git branch -a 

A možete se prebaciti na bilo koju granu koju već imate.

 git checkout <your_branch_name> 

Ne brinite da se nakon "git clone" ne morate spajati na udaljeno repo, "git branch -a" i "git checkout" mogu se uspješno pokrenuti kada zatvorite Wi-Fi. Dakle, dokazano je da kada pokrenete "git clone", on je već kopirao sve grane s udaljenog repoa. Nakon toga, ne trebate daljinski repo, vaš lokalni već ima kodove za sve grane.

23
19 нояб. odgovor je dao Haimei 19. studenog 2014-11-19 18:43 '14 u 18:43 2014-11-19 18:43

git clone bi trebao kopirati cijelo spremište. Pokušajte ga klonirati, a zatim pokrenite git branch -a . Mora navesti sve grane. Ako se želite prebaciti na "foo" granu umjesto na "master", koristite git checkout foo .

21
16 сент. odgovor od MattoxBeckman 16. rujna 2008-09-16 01:46 '08 u 1:46 am 2008-09-16 01:46

Koristite moj git_remote_branch alat (trebate Ruby instaliran na vašem računalu). Stvoren je posebno za daljinske manipulacije s mrtvim granama.

Svaki put kad izvrši operaciju u vaše ime, ispisuje je crvenom bojom na konzoli. S vremenom, oni konačno upadnu u tvoj mozak :-)

Ako ne želite da grb izvodi naredbe u vaše ime, jednostavno koristite funkciju "objasni". Na konzolu će se ispisati naredbe, koje neće biti izvršene za vas.

Konačno, sve naredbe imaju pseudonime kako bi se olakšalo pamćenje.

Imajte na umu da je to alfa softver ; -)

Ovdje je pomoć pri pokretanju grb pomoći:

 git_remote_branch verzija 0.2.6   Upotreba:   grb create branch_name [origin_server]grb objaviti ime_grane [izvorni_server]grb preimenuj branch_name [origin_server]grb delete branch_name [origin_server]grb track branch_name [izvorni_server]Napomene:   - Ako izvorni_server nije naveden, pretpostavlja se naziv 'izvor'  (zadano git)   - Funkcija preimenovanja preimenuje trenutnu granu   Meta-naredba: možete i preprediti bilo koju naredbu pomoću  ključna riječ "objasni".  Umjesto izvršavanja naredbe, git_remote_branch  jednostavno će ispisati popis naredbi  taj cilj.   primjer:  grb objasniti stvoriti grb objasniti stvoriti my_branch github   Sve naredbe imaju i pseudonime:   create: create, new   delete: delete, destroy, kill, remove, rm   objaviti: objaviti, udaljiti   preimenovati: preimenovati, rn, mv, move   pratiti: pratiti, slijediti, zgrabiti, dohvatiti
19
20 сент. odgovor je dat webmat 20 sep . 2008-09-20 16:53 '08 u 16:53 2008-09-20 16:53

Svi odgovori koje sam ovdje vidio su valjani, ali postoji mnogo čišći način da se klonira skladište i povuku sve grane u isto vrijeme.

Kada klonirate spremište, sve informacije o granama se zapravo učitavaju, ali grane su skrivene. Upotrebom naredbe

 $ git branch -a 

možete prikazati sve grane spremišta i uz pomoć naredbe

 $ git checkout -b branchname origin/branchname 

Možete ih ručno preuzeti jedan po jedan.


Međutim, ako želite klonirati repo s više grana, svi gore opisani putovi su dugi i zamorni s obzirom na mnogo čišći i brži način koji ću pokazati, iako je to malo teško. Da biste to učinili, morate izvesti tri koraka:

  • Prvi korak

Stvorite novu praznu mapu na računalu i klonirajte kopiju zrcala .git-mape iz spremišta:

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

lokalno spremište unutar mape my_repo_folder je još uvijek prazno, sada postoji samo skrivena mapa .git, koju možete vidjeti pomoću naredbe "ls -alt" iz terminala.

  1. Drugi korak

prebaciti ovo spremište iz praznog (golog) spremišta u regularno spremište prebacivanjem logičke "golih" vrijednosti iz git konfiguracija u lažnu:

 $ git config --bool core.bare false 
  1. Treći korak

Snimite sve unutar trenutne mape i stvorite sve grane na lokalnom računalu, što ga čini redovitim repo.

 $ git reset --hard 

Sada možete jednostavno unijeti naredbu "git branch" i vidjet ćete da su sve grane učitane.

Ovo je brz način da klonirate git repozitorij sa svim granama u isto vrijeme, ali to nije ono što želite za svaki pojedinačni projekt na ovaj način.

14
06 дек. Odgovor daje FedericoCapaldo 06. prosinca. 2015-12-06 23:08 '15 u 23:08 2015-12-06 23:08

Pa, kada klonirate repo, imate sve grane tamo ...

Ako samo radite git branch , one su vrsta skrivene ...

Stoga, ako želite vidjeti sve nazive grana, jednostavno dodajte oznaku - sve kako slijedi:

git branch --all ili git branch -a

Ako samo naručite u podružnici, dobit ćete sve što vam je potrebno.

Ali što ako je klonirana grana koju je stvorio netko drugi?

U tom slučaju učinite sljedeće:

git fetch

i ponovno provjerite sve grane ...

Ako želite primati i izvršavati narudžbu u isto vrijeme, možete to učiniti:

git fetch git checkout your_branch_name

Izradili ste i sliku ispod kako biste pojednostavili ono što sam rekao:

2019

Promatrajući jedan od odgovora na pitanje, primijetio sam da se može smanjiti:

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

Ali budite oprezni ako se jedna od udaljenih grana nazove kao, na primjer. admin_master neće se učitati!

Zahvaljujući velikoj ribi za originalnu ideju

12
20 февр. Odgovor je dao Tebe 20. veljače. 2015-02-20 00:33 '15 u 0:33 2015-02-20 00:33
 #!/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 

Ovaj kod će povući cijeli kod udaljenih ogranaka na lokalni repo.

11
11 дек. odgovor je dao Albert.Qing 11. prosinca. 2016-12-11 05:20 '16 u 5:20 am 2016-12-11 05:20

Kloniranje iz lokalnog repoa neće raditi s git klonom i git fetch-om: mnoge grane / oznake ostaju nepromijenjene.

Da biste dobili klon sa svim granama i oznakama.

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

Da biste dobili klon sa svim granama i oznakama, kao i radnu kopiju:

 git clone --mirror git://example.com/myproject myproject/.git cd myproject git config --unset core.bare git config receive.denyCurrentBranch updateInstead git checkout master 
10
24 февр. Odgovor je dat raisercostin 24. veljače. 2017-02-24 02:55 '17 u 2:55 2017-02-24 02:55

Za kopiranje i lijepljenje u naredbeni redak:

 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 

Za veću čitljivost:

 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 


To će biti:
  • provjerite glavni (da bismo mogli izbrisati granu u kojoj se nalazimo)
  • odaberite daljinski za provjeru (promijenite ga na bilo koji udaljeni poslužitelj)
  • kružite kroz sve grane daljinskog upravljača, osim mastera i HEAD
    • izbrišite lokalnu podružnicu (kako bismo mogli provjeriti grane ažurirane sile)
    • provjerite granu s udaljenog uređaja
  • provjerite majstora (radi njega)

Na temelju odgovora VonC .

10
20 дек. Odgovor je dat ikaruss 20. prosinca. 2013-12-20 09:38 '13 u 9:38 2013-12-20 09:38

Napisao sam ovu malu Powershell funkciju da bih mogao izdvojiti sve moje git grane koje su na udaljenom poslužitelju.

 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>' #> } 

Više git značajki može se naći u mom spremištu git postavki.

8
19 июня '16 в 13:54 2016-06-19 13:54 odgovor je dao gringo_dave 19. lipnja '16 u 13:54 2016-06-19 13:54

I ja sam trebala učiniti isto. Ovdje je moja Ruby skripta.

 #!/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
11 дек. Odgovor daje korisnik43685 11. prosinca. 2010-12-11 02:12 '10 u 2:12 2010-12-11 02:12

Od početka 2017. godine odgovor na ovaj komentar funkcionira:

git fetch <origin-name> <branch-name> vraća granu za vas. Iako ne povlači sve grane odjednom, ovu granu možete izvršiti zasebno.

6
21 апр. odgovor je dat ashes999 21 apr. 2017-04-21 23:14 '17 u 23:14 2017-04-21 23:14

Koristite naredbe koje možete zapamtiti.

Koristim Bitbucket, Atlassian Repozitorij Hosting Service. Zato pokušavam slijediti njihove dokumente. I to mi dobro ide. Pomoću sljedećih jednostavnih i kratkih naredbi možete urediti udaljenu granu.

Prvo klonirajte spremište, a zatim idite do odredišne ​​mape. I zadnje ali ne manje važno: uzorkovanje i provjera:

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

Jeste. Evo malo realnijeg primjera:

 git clone https://username@bitbucket.org/team/repository.git project_folder cd project_folder git fetch  git checkout develop 

Detaljne informacije o naredbama možete pronaći u dokumentaciji: naredba kloniranja, naredba izdvajanja, naredba izdvajanja

6
11 марта '16 в 23:01 2016-03-11 23:01 odgovor je dao Phil 11. ožujka '16. u 23.01. 2016-03-11 23:01

Git obično (ako nije naveden) izdvaja sve grane i / ili oznake (refs, vidi: git ls-refs ) iz jednog ili više drugih spremišta, zajedno s objektima potrebnim za dovršavanje njihovih priča. Drugim riječima, dohvaća objekte koji su dostupni već učitanim objektima. Vidi: Što doista git fetch ?

Ponekad možete imati grane / oznake koje nisu izravno povezane s trenutnom, tako da git pull --all / git fetch --all neće pomoći u ovom slučaju, ali ih možete navesti putem:

 git ls-remote -h -t origin 

i dobiti ih ručno, znajući imena veza.

Dakle, da biste ih sve izdvojili , pokušajte:

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

Opcija --depth=10000 može pomoći ako stavite spremište.

Zatim ponovno provjerite sve grane:

 git branch -avv 

Ako gore navedeno ne pomogne, potrebno je ručno dodati odsječene grane na nadzirani popis (budući da su na neki način izgubljene):

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

na primjer:

 git remote set-branches --add origin missing_branch 

tako da izgleda nakon remotes/origin nakon vađenja:

 $ 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 

Rješavanje problema

Ako još uvijek ne možete dobiti ništa osim glavne grane, provjerite sljedeće:

  • Na primjer, provjerite svoje konzole ( git remote -v ).
    • Potvrdite da je git config branch.master.remote origin .
    • Uvjerite se da origin upućuje na ispravan URL: git remote show origin (pogledajte poruku ).
6
31 марта '16 в 3:48 2016-03-31 03:48 odgovor je dan kenorb 31. ožujka 16. u 3:48 2016-03-31 03:48

Niti jedan od tih odgovora nije izrezan, osim što korisnik nije na pravom putu.

Imam problema s pomicanjem repoa s jednog poslužitelja na drugi. Kada sam klonirao repo, stvorio je samo lokalnu podružnicu za majstora, pa kad sam kliknuo na novi daljinski upravljač, pritisnuta je samo glavna grana.

Dakle, pronašao sam ove dvije metode vrlo korisne. Nadam se da će pomoći nekome drugome.

Prva metoda:

 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 

Metoda 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 
5
23 янв. Odgovor dao Gaui 23. siječnja 2015-01-23 20:51 '15 u 20:51 2015-01-23 20:51

Evo još jedne kratke naredbe od jednog retka koja stvara lokalne podružnice za sve udaljene grane:

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

Također radi ispravno ako je praćenje lokalnih podružnica već stvoreno. Možete ga nazvati nakon prvog git clone ili u bilo koje vrijeme kasnije.

Ako ne želite da master grana izađe nakon kloniranja, koristite

 git branch -r | sed -n '/->/!s#^ origin/##p'| xargs -L1 git checkout 
5
10 сент. odgovor je dao jofel Sep 10 2015-09-10 15:04 '15 u 15:04 2015-09-10 15:04

Ja ću dodati moje 2 centa ovdje jer sam pokušao shvatiti kako izbrisati izbrisane grane koje sam izbrisao lokalno. Podrijetlo nije bilo moje, i nisam htjela prolaziti kroz gnjavažu zbog kloniranja svega.

To mi je pomoglo:

pod pretpostavkom da trebate ponovno stvoriti granu lokalno:

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