Ar „git fetch-tags“ apima „git fetch“?

Geras ir paprastas klausimas yra „git fetch“ funkcija, kuri yra griežtas „git fetch“ git fetch --tags rinkinys?

t.y. Jei git fetch --tags , ar yra priežastis nedelsiant paleisti „ git fetch ?

Ką apie git pull ir git pull --tags ? Ta pati situacija?

218
30 июля '09 в 5:47 2009-07-30 05:47 nustatė, kad meowsqueak liepos 30 d., 09: 05:47 2009-07-30 05:47
@ 5 atsakymai

Pastaba: kadangi git 1.9 / 2.0 (2014 m. I ketvirtis) , „ git fetch --tags žymės papildo žymes be tų, kurie buvo gauti iš vienos komandinės eilutės be pasirinkimo.

Žr. Įsipareigojimą c5a84e9 Michael Haggerty (mhagger) :

Anksčiau „ --tags “ mėginys buvo laikomas lygiaverčiu nurodant refspec

 refs/tags/*:refs/tags/* 

komandinėje eilutėje; visų pirma, dėl šios priežasties buvo ignoruojama remote.<name>.refspec konfigūracija.

Tačiau nėra labai naudinga ištraukti žymes, nepasirinkus kitų nuorodų, o tai yra naudinga išgauti žymes be kitų nuorodų.
Todėl pakeiskite šios parinkties semantiką, kad ji būtų paskutinė.

Jei vartotojas nori tik žymų, vis tiek galite nurodyti aiškų nuorodą:

 git fetch <remote> 'refs/tags/*:refs/tags/*' 

Atkreipkite dėmesį, kad dokumentai prieš 1.8.0.3 versiją buvo dviprasmiški dėl šio el.
„Commit f0cb2f1“ (2012-12-14) „ fetch --tags pateikė dokumentus pagal senąjį elgesį.
Šis pataisymas pakeičia dokumentaciją pagal naują elgesį (žr. Documentation/fetch-options.txt ).

Prašyti, kad visos žymės būtų pašalintos iš ištrintos , be to, kas dar nebuvo pasirinkta .


Kadangi „Git 2.5“ (2015 m. git pull --tags ) „ git pull --tags stabilesnis:

Žr. Įsipareigojimą 19d122b Paul Tan ( pyokagan ) , 2015 m. Gegužės 13 d
Junio ​​C Hamano“ - „ gitster - įsipareigoti cc77b99 , 2015 m. gegužės 22 d.

pull : pašalinkite --tags klaidą, susijungus be sujungimo

Nuo 441ed41 („ git pull --tags “: klaida su geriausiu pranešimu. 2007-12-28, 1.5.4+ Git), „ git pull --tags “ išspausdins kitą klaidos pranešimą, jei „ git-fetch nepateikė kandidatų į sujungti:

 It doesn't make sense to pull all tags; you probably meant: git fetch --tags 

Taip yra todėl, kad šiuo metu „ git-fetch --tags pakeis bet kokius sukonfigūruotus „refspecs“, todėl nėra jokių sujungimo kandidatų. Siekiant išvengti painiavos, buvo įvestas klaidos pranešimas.

Tačiau, kadangi „ c5a84e9“ ( atsiųskite fetch --tags : žymių įkėlimas be kitų dalykų, 2013-10-30, Git 1.9.0+), „ git fetch --tags žymės papildomai gaus žymes su bet kokiais konfigūruotais refspecs.
Todėl, jei kyla kokių nors kandidatų sujungimo problemų, tai --tags nes - įdiegtos --tags . Taigi šis specialus klaidos pranešimas dabar nesvarbu.

Norėdami išvengti painiavos, pašalinkite šį klaidos pranešimą.


Naudojant „Git 2.11+“ (2016 m. Ketvirtąjį ketvirtį), „Git Fetch“ veikia greičiau.

Žr. Įsipareigojimą 5827a03 (2016 m. Spalio 13 d.) Jeff King ( peff ) .
(„ Yunio S Hamano“ - „ gitster - įsipareigoti 9fcd144 , 2016 m. spalio 26 d.)

has_sha1_file : naudokite greitą has_sha1_file kitą žymę

Ištraukdami iš nuotolinio, turinčio daug žymių, nesusijusių su šakomis, mes naudojome per daug ciklų, kad patikrintume, ar žymos nurodytas objektas (kurio mes nerenkame!) Mūsų saugykloje yra pernelyg atsargiai.

Šis pleistras moko mėginį naudoti HAS_SHA1_QUICK, kad sukeltų greičio tikslumą, tais atvejais, kai mes galime vienu metu perpakuoti.

Čia pateikiami įtraukto perf scenarijaus rezultatai, kurie nustato situaciją, panašią į pirmiau aprašytą situaciją:

 Test HEAD^ HEAD ---------------------------------------------------------- 5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3% 

Tai taikoma tik tais atvejais, kai:

  • Jūs turite daug kliento pusės paketų, kad reprepare_packed_git() brangus (brangiausia dalis yra surasti dublikatus nerūšiuotame sąraše, kuris šiuo metu yra kvadratinis).
  • Serverio pusėje jums reikia daug refs žymių, kurios yra kandidatės automatiniam stebėjimui (t. Y., Ką klientas neturi). Kiekvienas iš jų pradeda perskaityti paketo katalogą.
  • Įprastomis aplinkybėmis klientas automatiškai vykdys šias žymes ir po vieno didelio mėginio (2) daugiau teisių nebus.
    Bet jei tos žymės rodo, kad istorija neatsiejama nuo to, ką klientas gauna, tai niekada nebus automatiškai sekama, ir šie kandidatai turės įtakos kiekvienam mėginiui.
126
16 дек. Atsakymą pateikė VonC Dec 16. 2013-12-16 13:10 '13, 13:10, 2013-12-16 13:10

Pastaba: šis atsakymas galioja tik git v1.8 ir vėlesniems.

Dauguma jų buvo pasakyta kituose atsakymuose ir komentaruose, tačiau čia pateikiamas trumpas paaiškinimas:

  • git fetch “ išskleidžia visus filialo filialus (arba visus, nurodytus „remote.fetch“ konfigūracijos parametru), visus jiems reikalingus įsipareigojimus ir visas žymes, kurias galima pasiekti iš šių filialų. Dažniausiai visi tokie žymenys pasiekiami.
  • git fetch --tags ištraukia visas žymes, kurios yra būtinos jiems. Jis neatnaujins filialų filialų, net jei jie bus gauti iš išgautų žymų.

Santrauka Jei tikrai norite būti atnaujintas tik su pavyzdžiu, turėtumėte atlikti abu.

Tai taip pat nėra „dvigubai lėtesnė“, jei nenorite rašyti teksto komandų eilutėje, tokiu atveju slapyvardžiai išsprendžia jūsų problemą. Iš tiesų, šiems dviem prašymams nėra pridėtinių išlaidų, nes jos prašo skirtingos informacijos.

124
30 июля '09 в 20:53 2009-07-30 20:53 atsakymą pateikė Jefromi liepos 30 d. , 09:53 , 2009-07-30 20:53

Atsakysiu sau.

Aš nusprendžiau, kad yra skirtumas. „git fetch-tags“ gali turėti visas žymes, tačiau jis nepadaro jokių naujų įsipareigojimų!

Pasirodo, kad jūs turite tai padaryti „atitinkamą“, t.y. žaisti „git pull“ be susiliejimo:

 $ git fetch --tags $ git fetch 

Tai gėda, nes ji yra dvigubai lėtesnė. Jei tik „git fetch“ turėjo galimybę daryti tai, ką paprastai daro, visose žymose.

47
30 июля '09 в 8:58 2009-07-30 08:58 atsakymas duotas „ meowsqueak“ liepos 30 d., 08:58, 2009-07-30 08:58

Dažniausia problema yra ta, kad git fetch bus išskleidžiamas +refs/heads/*:refs/remotes/$remote/* . Jei kuri nors iš šių įsipareigojimų turi žymes, šios žymos taip pat bus išgautos. Tačiau, jei yra žymių, kurios nėra prieinamos bet kuriam nuotolinio valdymo pulto filialui, jos nebus ištraukiamos.

--tags parinktys persijungia refspec į +refs/tags/*:refs/tags/* . Galite paprašyti, kad „ git fetch abu. Aš tikiu, kad tiesiog paleiskite „ git fetch git fetch -t , naudosite šią komandą:

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

Ir jei norite, kad jis būtų numatytasis šis atpirkimo sandoris, galite pridėti antrąjį refspec į numatytąjį pasirinkimą:

 git config --local --add remote.origin.fetch +refs/tags/*:refs/tags/* 

Šiai konsolei bus pridėta antroji eilutė fetch = .git/config .


Aš praleidau šiek tiek laiko ieškant būdų, kaip tai padaryti projektui. Štai ką aš atėjau.

 git fetch -fup origin +refs/*:refs/* 

Mano atveju man reikia šių funkcijų.

  • Ištraukite visus nuotolinio valdymo pulto galvosūkius ir žymes, todėl naudokite refspec refs/*:refs/*
  • Perrašykite vietinius filialus ir žymes sparčiu šuoliu + prieš refspec
  • Jei reikia, perrašykite šiuo metu patikrintą sriegį -u
  • Ištrinkite filialus ir žymes, kurios nėra nuotolinio -p
  • Ir įsitikinkite, kad -f
29
19 февр. atsakymas duotas gnarf 19 feb . 2013-02-19 01:57 '13 at 1:57 2013-02-19 01:57

Daugeliu atvejų „ git fetch turėtų daryti tai, ko norite, „gauti kažką naujo iš nuotolinio saugyklos ir įdėti ją į savo vietinę kopiją, nesusiejant su vietiniais filialais“. git fetch --tags tai tiesiog daro, išskyrus tai, kad ji gauna tik naujų žymų.

Šia prasme git fetch --tags jokiu būdu nėra „ git fetch viršutinė dalis. Tiesą sakant, tai yra visiškai priešinga.

git pull , žinoma, yra nieko daugiau nei „ git fetch <thisrefspec>; git merge git fetch <thisrefspec>; git merge . Jis rekomendavo priprasti prie rankų git fetch ir git merge kol pereisite prie „ git pull nes tai padeda jums suprasti, kas pirmiausia yra git pull .

Santykis yra lygus tokiam pat git fetch kaip ir git fetch . git pull yra „ git pull --tags .

8
30 июля '09 в 15:19 2009-07-30 15:19 Atsakymą pateikė Timas Visheris liepos 30 d., 09:15 , 2009-07-30 15:19

Kiti klausimai apie „ žymes „ arba Užduoti klausimą