Kaip klonuoti visus nuotolinius filialus „Git“?

Turiu master filialą ir development šaką, kuri yra „ GitHub“ . Aš esu clone d, pull ir fetch , bet aš negaliu gauti nieko, išskyrus master filialą.

Esu įsitikinęs, kad trūksta kažko akivaizdaus, bet perskaičiau vadovą ir nesulaukiu jokio džiaugsmo.

3676
16 сент. nustatė Peter Coulton rugsėjo 16 d 2008-09-16 01:42 '08 ne 1:42 2008-09-16 01:42
@ 35 atsakymai
  • 1
  • 2

Pirmiausia klonuokite nuotolinį „ Git“ saugyklą ir cd į jį:

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

Tada naršykite vietos saugykloje esančius padalinius:

 $ git branch * master 

Tačiau kitose šakose slepiasi jūsų saugykla! Juos galite matyti naudodami „flag“:

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

Jei norite greitai peržiūrėti aukščiau esantį filialą, galite jį patikrinti tiesiogiai:

 $ git checkout origin/experimental 

Bet jei norite dirbti su šiuo filialu, turite sukurti vietinį stebėjimo filialą, kuris bus vykdomas automatiškai:

 $ git checkout experimental 

ir jūs pamatysite

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

Ši paskutinė eilutė išmeta kai kuriuos žmones: „Naujas filialas“ - taip? Tiesą sakant, tai reiškia, kad filialas yra paimtas iš indekso ir sukurtas vietoje. Ankstesnė eilutė iš tikrųjų yra labiau informatyvi, nes ji nurodo, kad filialas sukonfigūruotas sekti nuotolinį filialą, kuris paprastai reiškia šakos / šakos pavadinimo šaką

Dabar, jei pažvelgsite į savo vietinius padalinius, tai pamatysite:

 $ git branch * experimental master 

Tiesą sakant, galite stebėti keletą nuotolinių saugyklų su 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 

Šiuo metu viskas gitk , todėl paleiskite gitk kad pamatytumėte, kas vyksta:

 $ gitk --all > 
4132
16 сент. atsakymą suteikia „ emk “ 16 sep . 2008-09-16 16:28 '08 at 4:28 pm 2008-09-16 16:28

Jei turite daug nuotolinių filialų, kuriuos norite gauti iš karto, paleiskite:

 $ git pull --all 
border=0

Dabar galite patikrinti bet kurį filialą, kaip jums reikia, nesikreipiant į nuotolinį saugyklą.

750
13 янв. Atsakymą Gabe Kopley pateikė sausio 13 d. 2011-01-13 19:42 '11 at 7:42 pm 2011-01-13 19:42

Šis „ bash“ scenarijus padėjo man:

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

Jis sukurs stebėjimo filialus visiems nuotoliniams filialams, išskyrus kapitoną (kurį tikriausiai gavote iš pirminės klonavimo komandos). Manau, kad jūs vis dar turite padaryti

 git fetch --all git pull --all 

būti tikri.

Vienas įdėklas : 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 Kaip įprasta: testas atliekant konfigūraciją prieš kopijuojant rm -rf visatą, kaip žinome

Kreditai vienam linijiniam laivui eina į vartotojo cfi

382
21 янв. atsakymą pateikė bigfish Jan 21 2011-01-21 05:18 '11, 5:18, 2011-01-21 05:18

Pasirinkus --mirror parinktį, atrodo, tinkamai nukopijuojami remote filialai. Tačiau jis įdiegia saugyklą kaip atvirą saugyklą, todėl jūs turite ją grąžinti į įprastą saugyklą.

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

Nuoroda: „ Git“ dažnai užduodami klausimai: kaip klonuoti saugyklą su visais nuotoliniu būdu stebimais filialais?

290
27 авг. atsakymas duotas Dave 27 rug. 2011-08-27 20:49 '11 ne 20:49 2011-08-27 20:49

Jūs galite lengvai persijungti į filialą nenaudodami išgalvoto „git checkout -b somebranch kilmės / somebranch“. Jūs galite tiesiog:

 git checkout somebranch 

„Git“ automatiškai atliks teisingą dalyką:

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

„Git“ patikrins, ar filialas egzistuoja tuo pačiu pavadinimu tiksliai viename nuotoliniame įrenginyje, ir jei taip, jis seka tą patį būdą, kaip aiškiai nurodydamas, kad tai yra nuotolinis filialas. Git-checkout man Git 1.8.2.1 puslapis:

Jei <branch> nerastas, tačiau stebėjimo filialas yra viename nuotolinio valdymo pultelyje (skambinkite <remote>) su atitinkamu pavadinimu, apsvarstykite, kaip lygiavertis

 $ git checkout -b <branch> --track <remote>/<branch> 
208
12 мая '12 в 15:11 2012-05-12 15:11 atsakymą pateikė Nikos C. Gegužės 12, 12 d. 15:11 2012-05-12 15:11

Dėl

$ git checkout -b eksperimentinė kilmė / eksperimentinė

naudojant

 $ git checkout -t origin/experimental 

ar išsamesnė, bet labiau paprasta prisiminti

 $ git checkout --track origin/experimental 

galbūt geriau nuotolinio saugyklos stebėjimo požiūriu.

89
27 июля '09 в 9:10 2009-07-27 09:10 atsakymas duotas murphytalk liepos 27 d. 09:10 2009-07-27 09:10

Jūsų pasirinkimas turėtų gauti visus nuotolinius filialus, tačiau jiems nėra sukurtos vietinės šakos. Jei naudojate „gitk“, turėtumėte pamatyti nuotolinius filialus, vadinamus „nuotoliniu būdu / kilme / dev“, arba kažką panašaus.

Jei norite sukurti vietinį filialą, pagrįstą nuotoliniu filialu, atlikite tokius veiksmus:

  git checkout -b dev refs / nuotolinės / kilmės / dev 

Ką turėtų grąžinti kažkas panašaus:

  Filialo ref nustatymas, skirtas sekti nuotolinio filialo refs / nuotolinius / kilmės / dev. Perjungta į naują filialą „dev“ 

Dabar, kai jūs esate dev filialas, „git pull“ atnaujins vietinį kūrėją tuo pačiu tašku, kaip nuotolinio „dev“ filialo. Atkreipkite dėmesį, kad jis išskirs visas šakas, bet tiesiog ištraukite tą, kuris yra ant medžio.

77
16 сент. Atsakyti Luuk Paulussen Rugsėjo 16 2008-09-16 01:52 '08, 1:52 am. 2008-09-16 01:52

Kai darote „git klonas git: // vieta“, visi filialai ir žymės ištraukiami.

Jei norite dirbti tam tikroje nuotolinio filialo dalyje, tarkime, tai yra nuotolinio valdymo pultas:

 git checkout -b branch origin/branchname 
57
16 сент. atsakymą elmarco pateikia 16 sep . 2008-09-16 01:47 '08 at 1:47 2008-09-16 01:47

Naudokite slapyvardžius. Nors nėra gimtoji „Git“ vienos eilutės, galite nustatyti savo kaip „

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

tada naudokite jį kaip

 git clone-branches 
48
15 мая '13 в 14:02 2013-05-15 14:02 atsakymą pateikė niekas gegužės 15 d., 13 val. 14:02 pm 2013-05-15 14:02

Tai nėra pernelyg sudėtinga, labai paprastas ir paprastas žingsnis yra toks:

git fetch origin Tai sukels visus nuotolinius filialus vietiniu.

git branch -a Tai parodys visus nuotolinius filialus.

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

Patikrinkite, ar esate dešinėje šakoje su tokia komanda:

 git branch 

Rezultatas bus:

 *your current branch some branch2 some branch3 

Atkreipkite dėmesį į dabartinio filialo * ženklą.

44
26 дек. atsakymas į Sam 26 d 2013-12-26 13:19 '13, 13:19, 2013-12-26 13:19

Kodėl matote tik „šeimininką“

git clone atsisiunčia visus nuotolinius filialus, tačiau juos laiko „nuotoliniais“, nors failai yra naujoje saugykloje. Yra viena išimtis, kad klonavimo procesas sukuria vietinį filialą, vadinamą „kapitonu“, iš nuotolinio filialo, vadinamo „kapitonu“. Pagal nutylėjimą git branch rodo tik vietinius filialus, todėl matote tik „šeimininką“.

git branch -a rodo visus filialus, įskaitant nuotolinius filialus.


Kaip gauti vietos filialus

Jei tikrai norite dirbti su filialu, jums tikriausiai reikės „vietinės“ versijos. Jei norite tiesiog sukurti vietinius filialus iš tolimų filialų (nekontroliuodami jų ir taip keičiant darbo katalogo turinį), galite tai padaryti taip:

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

Šiame pavyzdyje branchone yra vietinės filialo, kurį sukuriate pagal origin/branchone ; jei norite sukurti vietinius filialus su skirtingais pavadinimais, galite tai padaryti:

 git branch localbranchname origin/branchone 

Sukūrę vietinį padalinį, galite jį pamatyti naudodami „ git branch (nepamirškite, kad jums nereikia -a žr. Vietinius skyrius).

43
05 марта '14 в 16:47 2014-03-05 16:47 atsakymą pateikė „ Cerran “ kovo 5 d. 14 d. 16:47 2014-03-05 16:47

Geriau vėlai nei niekada, bet čia yra geriausias būdas tai padaryti:

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

Šiame etape turite visą nuotolinio atpirkimo kopiją su visais jos filialais (patikrinkite su git branch ). „ --mirror galite naudoti vietoj „ --bare jei jūsų nuotolinio repo turi savo konsolę.

40
27 нояб. atsakymą pateikė Jacobas Fike . 2012-11-27 02:42 '12 at 2:42 2012-11-27 02:42

Tiesiog atlikite šiuos veiksmus:

 $ 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 

Matote, kad git klonas git: //example.com/myprojectt ištraukia viską, net filialus, jums reikia tik juos patikrinti, tada bus sukurtas jūsų vietinis filialas.

38
31 мая '11 в 14:40 2011-05-31 14:40 atsakymą pateikė rapher , gegužės 31 d. 11 val. 14.40.2011-05-31 14:40

Norint gauti visus filialus, turite naudoti „git kloną“.

 git clone <your_http_url> 

Net jei matote tik vedlio filialą, galite naudoti „git branch“, kad pamatytumėte visus filialus.

 git branch -a 

Ir galite pereiti prie bet kokio filialo, kurį jau turite.

 git checkout <your_branch_name> 

Nesijaudinkite, kad po „git klono“ nereikia prisijungti prie nuotolinio repo, „git branch -a“ ir „git checkout“ gali būti sėkmingai paleisti, kai uždarysite „Wi-Fi“. Taigi įrodyta, kad paleisdami „git kloną“ jis jau nukopijavo visus filialus iš nuotolinio repo. Po to nereikia nuotolinio atpirkimo, vietinis jau turi visų filialų kodus.

23
19 нояб. atsakymą pateikė Haimei lapkritis 19 2014-11-19 18:43 '14, 18:43, 2014-11-19 18:43

git clone turi kopijuoti visą saugyklą. Pabandykite jį klonuoti ir paleiskite git branch -a . Jis turi išvardyti visus filialus. Jei norite pereiti prie „foo“ filialo vietoj „master“, naudokite git checkout foo .

21
16 сент. MattoxBeckman atsakymas rugsėjo 16 d 2008-09-16 01:46 '08, 1:46 am. 2008-09-16 01:46

Naudokite įrankį „ git_remote_branch“ (kompiuteryje reikia įdiegti „Ruby“). Ji buvo sukurta specialiai, kad nuotoliniai manipuliacijos su filialais būtų mirę.

Kiekvieną kartą, kai jis atlieka operaciją jūsų vardu, jis konsolėje spausdina jį raudonai. Laikui bėgant jie pagaliau patenka į jūsų smegenis :-)

Jei nenorite, kad grb paleistų komandas jūsų vardu, tiesiog naudokite „paaiškinti“ funkciją. Komandos bus atspausdintos į konsolę, kurios nebus vykdomos jums.

Galiausiai visos komandos turi slapyvardžius, kad palengvintų atmintį.

Atkreipkite dėmesį, kad tai yra alfa programinė įranga ; -)

Čia rasite pagalbą pradedant grb help:

 git_remote_branch versija 0.2.6   Naudojimas:   grb sukurti filialo pavadinimą [origin_server]grb skelbia filialo pavadinimą [origin_server]grb pervadinti filialo pavadinimą [origin_server]grb delete branch_name [origin_server]„Grb Track“ filialo vardas [origin_server]Pastabos:   - Jei origin_server nenurodytas, laikoma, kad pavadinimas „origin“  (git numatytasis)   - Pervadinti funkciją pervardija dabartinį filialą   Meta-komanda: taip pat galite priskirti bet kokią komandą  raktinis žodis „paaiškinti“.  Užuot vykdę komandą, git_remote_branch  tiesiog išvedys komandų sąrašą  šį tikslą.   Pavyzdys:  grb paaiškinti sukurti grb paaiškinti sukurti my_branch github   Visose komandose taip pat yra slapyvardžiai:   sukurti: sukurti, naują   ištrinti: ištrinti, sunaikinti, nužudyti, pašalinti, rm   skelbti: skelbti, remti   pervadinti: pervardyti, rn, mv, perkelti   takelis: sekti, sekti, patraukti, paimti
19
20 сент. atsakymas pateikiamas webmat 20 sep . 2008-09-20 16:53 '08 at 4:53 pm 2008-09-20 16:53

Visi čia matyti atsakymai galioja, tačiau yra daug švaresnis būdas klonuoti saugyklą ir tuo pačiu metu ištraukti visus filialus.

Kai klonuojate saugyklą, visa informacija apie šakas yra faktiškai pakrauta, tačiau šakos yra paslėptos. Komandos naudojimas

 $ git branch -a 

galite parodyti visus saugyklos filialus ir naudodami komandą

 $ git checkout -b branchname origin/branchname 

Galite juos atsisiųsti rankiniu būdu.


Tačiau, jei norite klonuoti repo su keliais filialais, visi pirmiau aprašyti keliai yra ilgi ir varginantys, atsižvelgiant į daug švaresnį ir greitesnį būdą, kurį ketinu parodyti, nors tai šiek tiek sunku. Norėdami tai padaryti, turite atlikti tris veiksmus:

  • Pirmasis žingsnis

Sukurkite naują tuščią aplanką kompiuteryje ir klonuokite .git-aplanko veidrodžio kopiją iš saugyklos:

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

aplanke „my_repo_folder“ esanti vietinė saugykla vis dar tuščia, dabar yra tik paslėptas .git aplankas, kurį galite pamatyti su terminalo „ls -alt“ komanda.

  1. Antrasis žingsnis

Perjunkite šį saugyklą iš tuščios (be ploto) saugyklos į įprastą saugyklą, pakeisdami loginę „bare“ reikšmę iš git konfigūracijų į false:

 $ git config --bool core.bare false 
  1. Trečias žingsnis

Užfiksuokite viską, kas yra esamo aplanko viduje, ir sukurkite visus vietinio įrenginio filialus, todėl jis yra įprastas repo.

 $ git reset --hard 

Taigi dabar galite tiesiog įvesti komandą „Git filialas“ ir pamatysite, kad visos šakos yra įkeltos.

Tai yra greitas būdas, kuriuo galite vienu metu klonuoti git repozitoriumą su visais filialais, tačiau taip nėra taip, kaip jūs norite kiekvienam atskiram projektui.

14
06 дек. Atsakymą pateikė FedericoCapaldo. 2015-12-06 23:08 '15 - 23:08 2015-12-06 23:08

Na, kai klonuojate savo repo, turite visus filialus ...

Jei tik darote git branch , jie yra paslėpti ...

Todėl, jei norite matyti visus filialų pavadinimus, tiesiog pridėkite: - all flag taip:

git branch --all arba git branch -a

Jei tiesiog užsakysite filialą, gausite viską, ko reikia.

Bet kas, jei filialas, kurį sukūrė kažkas po klonavimo?

Tokiu atveju tiesiog atlikite:

git fetch

ir vėl patikrinkite visus filialus ...

Jei norite gauti ir pateikti užsakymą vienu metu, galite:

git fetch git checkout your_branch_name

Taip pat sukūrėte žemiau pateiktą vaizdą, kad galėtumėte supaprastinti tai, ką pasakiau:

2019

22 июля '17 в 21:29 2017-07-22 21:29 Atsakymą Alireza pateikė liepos 21 d. 17 val. 21:29 2017-07-22 21:29

Pažvelgus į vieną iš atsakymų į klausimą, pastebėjau, kad jis gali būti sumažintas:

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

Bet būkite atsargūs, jei vienas iš atokiausių šakų vadinamas, pvz. admin_master jis nebus įkeltas!

Didelių žuvų dėka buvo sukurta idėja

12
20 февр. Atsakymą pateikė Tebe vasario 20 d. 2015-02-20 00:33 '15 prie 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 

Šis kodas ištrauks visą nutolusių filialų kodą į vietinį atpirkimą.

11
11 дек. atsakymą pateikė Albert.Qing, gruodžio 11 d. 2016-12-11 05:20 '16 at 5:20 am 2016-12-11 05:20

Klonavimas iš vietinės repo neveiks su git klonu ir git atnešimu: daugelis filialų / žymių bus palikti nepakitę.

Norėdami gauti kloną su visomis šakomis ir žymėmis.

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

Norėdami gauti kloną su visais filialais ir žymėmis, taip pat darbo kopiją:

 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 февр. Atsakymas pateikiamas raisercostin 24 vasaris. 2017-02-24 02:55 '17 at 2:55 2017-02-24 02:55

Jei norite nukopijuoti į komandų eilutę:

 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 

Norėdami geriau skaityti:

 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 


Tai bus:
  • patikrinkite meistrą (kad galėtume ištrinti filialą, kuriame esame)
  • pasirinkite nuotolinį valdiklį (pakeiskite jį į bet kurį nuotolinį serverį)
  • važiuokite per visus nuotolinio valdymo bloko filialus , išskyrus šeimininką ir HEAD
    • ištrinkite vietinį skyrių (kad galėtume patikrinti atnaujintos jėgos šakas)
    • patikrinti nuotolinio įrenginio filialą
  • patikrinkite meistrą (dėl jo)

Remiantis atsakymu VonC .

10
20 дек. Atsakymas pateikiamas ikaruss 20 d. 2013-12-20 09:38 '13 ne 9:38 2013-12-20 09:38

Aš parašiau šią mažą „ Powershell“ funkciją, kad galėčiau išgauti visus mano git filialus, esančius nuotoliniame serveryje.

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

Daugiau git funkcijų galima rasti mano git parametrų saugykloje.

8
19 июня '16 в 13:54 2016-06-19 13:54 atsakymą pateikė „ gringo_dave“ birželio 19, 16 d. 13:54 2016-06-19 13:54

Aš turėjau daryti tą patį. Čia yra mano Ruby scenarijus.

 #!/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 дек. Atsakymą pateikė user43685 11 Dec. 2010-12-11 02:12 '10, 2:12, 2010-12-11 02:12

Nuo 2017 m. Pradžios šiame komentare atsakoma:

git fetch <origin-name> <branch-name> grąžina jums filialą. Nors jis neatitraukia visų filialų vienu metu, šį filialą galite vykdyti atskirai.

6
21 апр. atsakymas pateikiamas ashes999 21 balandžio. 2017-04-21 23:14 '17 at 11:14 pm 2017-04-21 23:14

Naudokite komandas, kurias galite įsiminti.

Aš naudoju „Bitbucket“, „Atlassian“ saugyklos prieglobos paslaugą. Todėl bandau sekti jų dokumentus. Ir man tai gerai. Naudodami šias paprastas ir trumpas komandas, galite suskirstyti nuotolinį filialą.

Pirmiausia klonuokite savo saugyklą, tada pereikite prie paskirties aplanko. Ir paskutinis, bet ne mažiau svarbus: mėginių ėmimas ir tikrinimas:

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

Tai yra. Štai šiek tiek realesnis pavyzdys:

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

Išsamią informaciją apie komandas galima rasti dokumentacijoje: „ Klono“ komanda, „ Ištrinti“ komanda, „ Ištrinti“ komanda

6
11 марта '16 в 23:01 2016-03-11 23:01 atsakymą pateikė „ Phil“ kovo 11 d., 16 d., 11.00 val. 2016-03-11 23:01

Paprastai (jei nenurodyta) „Git“ ištraukia visus filialus ir (arba) žymes (žr.: Git git ls-refs ) iš vieno ar daugiau kitų saugyklų, kartu su objektais, reikalingais jų istorijoms užbaigti. Kitaip tariant, jis surenka objektus, kuriuos pasiekia jau pakrauti objektai. Žiūrėkite: Ką iš tikrųjų daro git fetch ?

Kartais gali būti filialų / žymų, kurie nėra tiesiogiai susiję su dabartiniu, todėl „ git pull --all / git fetch --all “ šiuo atveju nepadės, tačiau galite juos išvardyti:

 git ls-remote -h -t origin 

ir gauti juos rankiniu būdu, žinodami nuorodų pavadinimus.

Taigi, norėdami juos išgauti , pabandykite:

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

Pasirinkus „ --depth=10000 galite padėti, jei --depth=10000 saugyklą.

Tada vėl patikrinkite visus filialus:

 git branch -avv 

Jei aukščiau pateikta informacija nepadeda, rankiniu būdu reikia įtraukti trūkstamus filialus į stebimą sąrašą (nes jie kažkaip prarasti):

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

pvz., „ git remote set-branches :

 git remote set-branches --add origin missing_branch 

taip, kad po ištraukimo jis atrodytų remotes/origin

 $ 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 

Trikčių šalinimas

Jei vis dar negalite gauti nieko, išskyrus pagrindinį filialą, patikrinkite:

  • Pvz., Patikrinkite savo konsoles ( git remote -v ).
    • Patvirtinkite, kad git config branch.master.remote yra origin .
    • Įsitikinkite, kad origin nurodo teisingą URL: git remote show origin (žr. Pranešimą ).
6
31 марта '16 в 3:48 2016-03-31 03:48 atsakymas pateikiamas kenorb kovo 31 d. 16 d. 3:48 2016-03-31 03:48

Nė vienas iš šių atsakymų nesumažėjo, išskyrus tai, kad vartotojas nėra teisingame kelyje.

Turiu problemų perkelti repo iš vieno serverio / sistemos į kitą. Kai klonavau atpirkimo sandorį, jis sukūrė tik vietinį padalinį kapitonui, taigi, kai paspaudau ant naujo nuotolinio valdymo pulto, buvo tik paspaudžiamas tik pagrindinis filialas.

Taigi, aš rasiu šiuos du metodus labai naudinga. Tikiuosi, kad jie padeda kitam.

1 metodas:

 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 

2 metodas:

 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 янв. Gaui atsakymas Jan 23 2015-01-23 20:51 '15 - 20:51 2015-01-23 20:51

Čia yra dar viena trumpa vieno eilutės komanda, kuri sukuria vietines filialus visiems nuotoliniams filialams:

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

Ji taip pat veikia tinkamai, jei jau sukurta vietinių filialų stebėjimas. Jį galite paskambinti po pirmojo git clone arba bet kuriuo metu vėliau.

Jei nenorite, kad po klonavimo master filialas išeitų, naudokite

 git branch -r | sed -n '/->/!s#^ origin/##p'| xargs -L1 git checkout 
5
10 сент. atsakymą pateikė jofel Sep 10 2015-09-10 15:04 '15 , 15:04 2015-09-10 15:04

Čia aš pridėsiu 2 centus, nes bandžiau išsiaiškinti, kaip ištrinti ištrintą filialą, kurį ištrinau vietoje. Kilmė buvo ne mano, ir aš nenorėjau eiti per viską, kad vėl klonuoti viską.