Mai mult
Cum pentru a șterge de la distanță o etichetă?
Cum poti sterge un Git tag-ul care a fost deja împinse?
3077
21
Cum poti sterge un Git tag-ul care a fost deja împinse?
Ai nevoie doar pentru a împinge un 'gol' de referință la distanță nume de etichetă:
Sau, mai expresiv, de a folosi
--delete
opțiune (sau-d
dacă git versiune este mai în vârstă decât 1.8.0):Rețineți că git are etichetă de nume și de ramură namespace astfel se poate folosi acelasi nume pentru o ramură și o etichetă. Dacă doriți să vă asigurați că nu puteți elimina accidental filiala loc de tag-ul, puteți specifica complet ref care va șterge niciodată o sucursală:
Dacă ai nevoie, de asemenea, să ștergeți locale, tagul, utilizare:
De fundal
Împingând-o ramură, tag-ul, sau alte ref la un depozit la distanță implică specificarea "care repo, ce sursa, ce destinație?"
Un exemplu real în cazul în care împinge stăpânul tău ramură de origine's ramura master este:
Care, din cauza căi implicit, poate fi redus la:
Tag-uri funcționează în același mod:
Care poate fi, de asemenea, redus la:
Prin omiterea sursa ref (o parte înainte de a colonului), te împinge 'nimic' la destinație, ștergerea ref la capătul îndepărtat.
O modalitate mai directă este
OMI prefixarea colon sintaxa este un pic ciudat în această situație
Dacă aveți o telecomandă tag
v0.1.0
pentru a șterge, și de la distanță este de "origine", apoi pur și simplu:Dacă ai nevoie, de asemenea, să ștergeți eticheta la nivel local:
A se vedea Adam Franco's a răspunde pentru o explicație de Git's neobișnuit
:
sintaxa pentru ștergere.Șterge toate tag-uri locale și de a lua lista de la distanță tag-uri:
Șterge de la distanță toate tag-uri
Curățați locale tag-uri
Pentru a elimina eticheta din depozitul de la distanță:
De asemenea, poate doriți să ștergeți eticheta la nivel local:
De pe terminalul dumneavoastră, face acest lucru:
Acum du-te la Github.com și reîmprospăta, ele dispar.
A șterge locale tag '12345'
A șterge de la distanță tag '12345' (de exemplu; GitHub versiune prea)
abordare alternativă
Prima linie sterge `your_tag_name din repo locală și a doua șterge de la distanță repo. Acum your_tag a fost șters complet, atât la nivel local și de la distanță repo, dar uneori poate fi nevoie pentru a elimina elimină tag-ul care a elaborat de GitHub manual în presă secțiune.
Doar observa că, dacă aveți o ramură de la distanță numit ca o telecomandă tag, aceste comenzi sunt ambigue:
Deci, trebuie să utilizați această comandă pentru a șterge eticheta:
și asta pentru a șterge ramura:
Dacă nu, v-ar obține o eroare de genul asta:
Până la 100 de ori mai rapidă metodă pentru mii de tag-uri de la distanță
După ce a citit prin aceste răspunsuri în timp ce au nevoie pentru a șterge peste 11.000 de tag-uri, am învățat aceste metode se bazează sau
xargs
ia prea mult timp, dacă nu ai ore pentru a arde.Luptă, am găsit două much modalități mai rapide. Pentru ambele, începe cu
git tag-ul " sau " git ls-la distanță-tag-uri pentru a face o listă de etichete pe care doriți să-l ștergeți de pe telecomandă. În exemplele de mai jos puteți omite sau de a înlocui
sorting_proccessing_etc cu oricegrep 'ing,
sortare' ing,coada 'ing sau
cap' ing vrei (e.g.grep -P "my_regex" | sortare | cap-n -200
etc) :Această primă metodă este de departe cel mai rapid, poate 20 la 100 times mai repede decât folosind
xargs
, și funcționează cu mai puțin de mai multe thousand tag-uri la un moment dat.Dacă ați creat un tag numit `release01 într-un depozit Git te-ar scoate din repository-ul dvs. de a face următoarele:
Pentru a elimina unul de la un Mercurial depozit:
Vă rugăm să referință https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
Dacă utilizați SourceTree - o mare Git GUI - atunci puteți face cu ușurință acest lucru fără linie de comandă de a face următoarele:
YOUR_TAG_NAME va fi acum scos din depozit local și toate telecomenzile - fie că este vorba GitHub, BitBucket, sau oriunde altundeva ai listat ca o telecomanda de la depozit.
De asemenea, dacă ați șters un tag la nivel local, dar nu de pe telecomanda origini, și doriți să-l ștergeți de pretutindeni, apoi a crea o nouă etichetă care are același nume și este atașat la același comite ca originile. Apoi, repetați pașii de mai sus pentru a șterge peste tot.
Ca @CubanX sugerat, am'am împărțit acest răspuns din original:
Aici este o metodă care este de câteva ori mai repede decât
xargs și pot scară mult mai mult cu tweaking. Se folosește [API Github](http://developer.github.com/v3/git/refs/#delete-a-reference), un personal de acces token, si foloseste utilitarul [
paralel`](http://www.gnu.org/software/parallel/parallel_tutorial.html).["paralel"] (https://www.gnu.org/software/parallel/parallel_tutorial.html) are mai multe moduri de operare, dar, în general, parallelizes orice comanda ai dat-o în timp ce permițându-vă să setați limitarea numărului de procese. Puteți modifica
--locuri de munca 2
parametru pentru a permite operarea mai rapidă, dar am avut probleme cu Github's rata limitele, care sunt în prezent 5000/h, dar, de asemenea, pare să aibă o nedocumentate scurt-termen limită la fel de bine.După aceasta,'ll probabil că doriți să ștergeți locale tag-uri prea. Acest lucru este mult mai rapid astfel încât să putem reveni la utilizarea
xargs " și " git tag -d
, ceea ce este suficient.Am vrut pentru a elimina toate etichetele cu excepția celor care se potrivesc cu un model, astfel încât am putut șterge toate, dar în ultimele două luni de producție categorie, aici's ceea ce am folosit cu mare succes:
Șterge de la Distanță Toate Tag-uri & Exclude Expresia De a Șterge
Șterge Toate Locale Tag-uri & Exclude Expresia De a Șterge
Alte răspunsuri subliniez modul de a realiza acest lucru, dar ar trebui să țină cont de consecințe, deoarece acesta este un depozit la distanță.
Git tag om pagină, în Pe Retagging secțiune, are o explicație bună despre cum să amabilitate să informeze de la distanță repo's alți utilizatori de schimbare. Ei da, chiar la îndemână un anunț șablon pentru a comunica modul în care alții ar trebui să-ți schimbă.
Daca're folosind PowerShell, și doriți să-l ștergeți câteva din ele:
Desigur, puteți filtra, de asemenea, le înainte de a șterge:
Script simplu pentru a elimina dat tag la atât locale, cât și de origine locații. Cu o verificați dacă tag-ul există într-adevăr.
Cum să utilizați:
Se pare ca o mulțime de muncă pentru ceva xargs deja de-a face. Privind înapoi prin acest thread, am'm ghicitul lentoarea cu xargs
pe care ai experimentat-o este pentru că originalul răspuns folosit xargs -n 1
atunci când l-am't într-adevăr nevoie.Acest lucru este echivalent cu metoda ta doar că
xargs
automat oferte cu maxim de linie de comandă lungime:xargs
poate rula procese în paralel prea. Metoda 2 cuxargs
:Cele de mai sus foloseste un maxim de 5 procese să se ocupe de un maxim de 100 de argumente în fiecare proces. Puteți experimenta cu argumente pentru a găsi ceea ce funcționează cel mai bine pentru nevoile dumneavoastra.
Dacă aveți o etichetă creat pornind de la # de caractere, de exemplu
#ST002
, s-ar putea găsi că u sunt în măsură să o ștergeți folosind modele normale. de exempluNu va șterge eticheta, dar de ambalaj într-un String Literal ca asa
Că va obține șterse. În speranța că va ajuta pe cineva care a făcut greșeala de a utiliza # pentru a scrie nume de tag-uri.
Aici este un local testcase să-l testeze la nivel local, fără încurcați cu telecomanda: