Sunku suprasti git -fetch

Man sunku suprasti git -fetch niuansus. Suprantu, kad fetch vykdymas, ištrintų nuorodų pasirinkimas vietiniame stebėjimo skyriuje.

Turiu keletą klausimų:

  • Ar įmanoma, kad vietos stebėjimo filialas neegzistuoja? Jei taip, ar ji bus automatiškai sukurta?

  • Kas atsitiks, jei aš fetch ir nurodysiu ne sekimo filialą kaip paskirties vietą?

  • Rankiniame puslapyje git -fetch nurodo:

     git-fetch <options> <repository> <refspec> 

Kaip naudoti refspec ištraukti turinį iš nuotolinio vedlio į nuotolinio stebėjimo šaką? Manau, kad tai įmanoma, jei mano dabartinis HEAD yra magistro laipsnis, ir aš einu

git fetch origin master

Tačiau ar galiu naudoti refspec <+?src:dest> tą patį? Manau, tai padės man geriau suprasti sąvokas.

Ir dar vienas klausimas:

Mano „.git / config“ faile yra tokia eilutė, iš kurios galima pasirinkti (rodant tik atitinkamas eilutes):

 fetch = +refs/heads/*:refs/remotes/origin/* 

Ar kas nors gali paaiškinti, ką tai reiškia?

48
01 июля '09 в 20:54 2009-07-01 20:54 Parag yra nustatytas liepos 01 '09, 20:54 2009-07-01 20:54
@ 4 atsakymai

Pirma, nėra tokios vietinių stebėjimo šakų koncepcijos, tik nuotolinio sekimo šakos. Taigi kilmė / kapitonas yra nuotolinio sekimo filialas, skirtas kilmės registrui.

Paprastai paleisite „ git fetch $ remote“ , kuris atnaujina visus nuotolinio stebėjimo filialus ir, jei reikia, sukuria naujus.

Tačiau taip pat galite nurodyti „refspec“, tačiau tai neturės įtakos jūsų nuotolinio stebėjimo šakoms, vietoj to pasirinks nurodytą filialą ir išsaugos jį FETCH_HEAD, nebent nurodote gavėją. Apskritai, jūs nenorite jausti su ja.

Galiausiai

 fetch = +refs/heads/*:refs/remotes/origin/* 

Tai reiškia, jei jūs darote

 git fetch origin 

Tai iš tikrųjų bus:

 git fetch origin +refs/heads/*:refs/remotes/origin/* 

Tai reiškia, kad nuotolinė galvutė / foobar bus vietinis nuotolinis / šaltinis / foobar , o pliuso ženklas reiškia, kad jie bus atnaujinti, net jei jie nėra greitai, į priekį.

Galbūt tai, ką manote kaip sekimo šaką, yra susijusi su git traukimu ir sujungimu.

54
01 июля '09 в 22:18 2009-07-01 22:18 atsakymą pateikė FelipeC liepos 1 d. , 09:18 val. 2009-07-01 22:18

felipec atsakė į daugumą klausimų, kurie buvo aptarti jo atsakyme .

Kai kurie likę (daugiausia paimami iš „ git fetch“ puslapio, kuris, deja, šiek tiek pasenęs kai kuriose vietose):

border=0
  • Jei nėra nuotolinio stebėjimo filialo (filialo, kuris seka filialą nuotolinėje saugykloje), jis bus sukurtas.

  • Įeinantis filialas ( <dst> [+]<src>:<dst> ) negali būti remotes/<remote>/ vardų srityje. Pvz., Jei norite atspindėti saugyklas ( git clone --mirror ), refspec yra nuo 1 iki 1. Senais laikais prieš atskirą konsolių išdėstymą (iki nuotolinio stebėjimo remotes/<remote>/ vardų erdvės nuotolinio stebėjimo nuorodoms) pagrindinis filialas buvo pasirinktas šakose, pavadintose kilmės . Net ir dabartiniai laiko žymenys yra parenkami tiesiai į tags/ vardų sritį, kai atspindi.

  • Jei pasirenkate filialą (egzistuoja dešinysis šoninis skydelis <src>:<dst> , „Git“ patikrins, ar atsisiuntimas lems greitą pasukimą, t. Y., Jei dabartinė būsena <dst> yra būsenos <src> būsena šiame nuotoliniame Jei taip nėra, ir jei --force -f / --force git -fetch arba refspec prefiksas su „+“ (naudokite +<src>:<dst> refspec), parsisiuntimas atsisakytų atnaujinti šį filialą.

  • git fetch origin master lygiavertis „ git fetch origin master: o ne „ git fetch origin master:master ; jis saugo gaunamos pagrindinės šakos (nuotolinės kilmės) vertę FETCH_HEAD, o ne švino šakoje ar nuotolinio stebėjimo remotes/origin/master pulte remotes/origin/master . Po to galima sekti „ git merge FETCH_HEAD . Paprastai jis tiesiogiai nenaudojamas, bet kaip vieno paspaudimo dalis, nenustatant nuotolinio stebėjimo filialo: git pull <URL> <branch> .

  • +refs/heads/*:refs/remotes/origin/* kaip nuotolinės pradžios konfigūracijos reikšmė reiškia, kad kiekvienas filialas (ref in refs/heads/ namespace) nuotolinėje pradžioje yra parinktas į atitinkamai pavadintą nuotolinio stebėjimo šaką pavadinimai refs/remotes/origin/ , pavyzdžiui. pagrindinis šaltinis šaltinyje (t.y. refs/heads/master ref) bus įkeltas į nuotolinio kilmės sekimo / pagrindinio filialo (t.y. refs/remotes/origin/master ref). Priedas „+“ reiškia, kad mėginys bus sėkmingas net ir tuo atveju, jei nebus greitai persiųstos, o tai reiškia, kad nuotolinio serverio filialas iš naujo nustatomas arba perjungiamas (iš naujo nustatomas tam tikra būsena praeityje) arba kitaip pakeistas.

„Sidenote“: norėdami valdyti nuotolines saugyklas ir gauti naujinimus, galbūt norėsite naudoti aukštesnį git nuotolio lygį.

20
01 июля '09 в 23:44 2009-07-01 23:44 atsakymą pateikė Jakubas Narębskis liepos 1 d., 09:44, 2009-07-01 23:44

Atkreipkite dėmesį, kad pagrindinė „Git“ parama yra dabar (Git 2.1, 2014 m. Rugpjūčio mėn.) Pridėjo šį paaiškinimą, kad būtų galima git fetch :
( įsipareigoti fcb14b0 Junio ​​C Hamano ( gitster )) :

KONFIGŪRUOJAMOS BRANČIAI REMOTE-TRACKING

Jūs dažnai bendraujate su ta pačia nuotolinio saugykla ir pakartotinai ištraukiate iš jo. Norėdami stebėti tokio nuotolinio saugyklos pažangą, „ git fetch leidžia sukonfigūruoti remote.<repository>.fetch konfigūracijos kintamuosius.

Paprastai toks kintamasis gali atrodyti taip:

 [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* 

Ši konfigūracija naudojama dviem būdais:

  • Paleidus „ git fetch , nenurodant, kokie filialai ir (arba) žymos bus išgautos, pavyzdžiui, komandinėje eilutėje. Vertės git fetch origin arba git fetch , remote.<repository>.fetch yra naudojamos kaip refspecs --- jos nustato, kurios nuorodos atkurti ir kurios vietinės nuorodos atnaujinamos .
    Pirmiau pateiktame pavyzdyje bus pasirinktos visos šakos, kurios yra origin (ty bet koks ref, kuris atitinka kairę vertės vertę, refs/heads/* ) ir atnaujina atitinkamus nuotolinio sekimo filialus refs/remotes/origin/* hierarchijoje.

  • Pvz., Kai „ git fetch vykdomas su aiškiomis šakomis ir (arba) žymomis, kurias galite išgauti komandinėje eilutėje. <refspec> git fetch origin master , <refspec> , nurodyta komandų eilutėje, nustato, kas turi būti išgauta (pvz., master pavyzdys, kuris yra trumpas master: o tai savo ruožtu reiškia „parsisiuntimą“, bet aš nesakau kad nuotolinio stebėjimo filialas su juo būtų atnaujintas iš komandinės eilutės "), o pavyzdžio komanda išskirs tik" master filialą ".
    remote.<repository>.fetch reikšmės remote.<repository>.fetch kurios nuotolinio stebėjimo šakos, jei yra, atnaujinamos.
    Naudojant tokiu būdu, remote.<repository>.fetch reikšmės remote.<repository>.fetch nepaveikia pasirinkimo, ką jis gauna (ty, vertės nėra naudojamos kaip refspecs, kai refspecs yra išvardytos komandinėje eilutėje); jie naudojami tik tam, kad būtų galima nustatyti, kur yra atkuriami refs, kurie veikia kaip ekranas.

4
02 авг. atsakymas pateikiamas VonC 02 rug . 2014-08-02 21:00 '14 21:00 val. 2014-08-02 21:00

Taip pat atkreipkite dėmesį, kad „Git 2.5+“ (2015 m. Antrąjį ketvirtį) „Git“ git merge FETCH_HEAD gali sujungti kelis gitą .

Žr. Įsipareigojimą d45366e Junio ​​C Hamano ( gitster ) , 2015 m. Kovo 26 d.
(sujungtas Junio ​​C Hamano - gitster - bcd1ecd , 2015 m. gegužės 19 d.)

git merge FETCH_HEAD “ sužinojo, kad ankstesnis „ git fetchgit merge FETCH_HEAD gali būti aštuonkojų sujungimo sukūrimas, t.y. kelių filialų, kurie nėra pažymėti kaip „nesijungti“, įrašymas; tai leidžia mums prarasti senojo stiliaus „ git merge <msg> HEAD $commits... įgyvendinant „ git pull “ scenarijų; Senasis sintaksė gali būti pasenusi.

git merge Doc“ dabar minimas:

Jei FETCH_HEAD (ir jokio kito įsipareigojimo), .git/FETCH_HEAD įrašyti filialai, .git/FETCH_HEAD ankstesniu git fetch skambučiu, yra sujungti į dabartinį filialą .


„Git 2.13“ (2017 m. git merge ) oficialiai ištrina seną „ git merge sintaksę.
Žr. Įsipareigojimą b439165 (2015 m. Kovo 26 d.) Junio ​​C Hamano ( gitster ) .
(„ Junio ​​S Hamano“ - „ gitster “ susijungimas - „ gitster , 2017 m. kovo 30 d.)

merge : drop ' git merge <message> HEAD <commit> ' sintaksė

Sustabdyti palaikymą „ git merge <message> HEAD <commit> “ sintaksei, kuri nuo 2007 m. Spalio mėn. Buvo panaikinta, ir įspėja apie 2.5.0 versijos atsisakymą.

Tai reiškia, kad senojo stiliaus " 'git merge <msg> HEAD <commit>' is deprecated. "Pasirodo įspėjamasis pranešimas.

2
24 мая '15 в 19:56 2015-05-24 19:56 atsakymą pateikė VonC , gegužės 24 d. 15, 19:56 2015-05-24 19:56

Kiti klausimai apie žymes arba Užduoti klausimą