Uzak bir etiket nas─▒l silinir?


Al─▒nan cevaba git


├ľnceden itilmi┼č bir Git etiketini nas─▒l silersiniz?


3029









Cevap say─▒s─▒n─▒ say: 21






Uzak etiket ad─▒na 'bo┼č' bir ba┼čvuru g├Ândermeniz yeterlidir:

 git push origin :tagname
 

Veya daha a├ž─▒k bir ┼čekilde, --delete se├žene─či kullan─▒n (veya -d git s├╝r├╝m├╝n├╝z 1.8.0'dan eskiyse):

 git push --delete origin tagname
 

Git'in etiket ad alan─▒na ve dal ad alan─▒na sahip oldu─čuna dikkat edin, b├Âylece ayn─▒ dalda ve bir etikette kullanabilirsiniz. Etiketi yerine ┼čubeyi yanl─▒┼čl─▒kla kald─▒ramayaca─č─▒n─▒zdan emin olmak istiyorsan─▒z, bir dal─▒ asla silmeyecek tam ref belirtebilirsiniz:

 git push origin :refs/tags/tagname
 

Yerel etiketi silmeniz gerekirse, ┼čunu kullan─▒n:

 git tag --delete tagname
 

Arka fon

Bir dal─▒, etiketi veya ba┼čka bir ref'i uzak bir havuza itmek, "hangi repo, hangi kaynak, hangi hedef?"

 git push remote-repo source-ref:destination-ref
 

Ana dal─▒n─▒z─▒ men┼če ana dal─▒na y├Ânlendirdi─činiz ger├žek bir d├╝nya ├Ârne─či:

 git push origin refs/heads/master:refs/heads/master
 

Varsay─▒lan yollar nedeniyle hangisi k─▒salt─▒labilir:

 git push origin master:master
 

Etiketler ayn─▒ ┼čekilde ├žal─▒┼č─▒r:

 git push origin refs/tags/release-1.0:refs/tags/release-1.0
 

Ayr─▒ca ┼ču k─▒salt─▒labilir:

 git push origin release-1.0:release-1.0
 

Kaynak ref'i (kolondan ├Ânceki k─▒s─▒m) atlayarak, uzak u├žtaki ref'i silerek hedefe 'hi├žbir ┼čey' g├Ânderemezsiniz.


5061







Daha basit bir yol

 git push --delete origin YOUR_TAG_NAME
 

IMO ├Âneki kolon s├Âzdizimi bu durumda biraz garip


340







v0.1.0 Silinecek bir uzak etiketiniz varsa ve kumandan─▒z ise origin :

 git push origin :refs/tags/v0.1.0
 

Etiketi yerel olarak da silmeniz gerekirse:

 git tag -d v0.1.0
 

Git'in silmek i├žin s─▒rad─▒┼č─▒ s├Âzdiziminin bir a├ž─▒klamas─▒ i├žin Adam Franco'nun cevab─▒na bak─▒n─▒z : .


195







T├╝m yerel etiketleri silin ve uzak etiketlerin listesini al─▒n :

 git tag -l | xargs git tag -d
git fetch
 

T├╝m uzak etiketleri kald─▒r

 git tag -l | xargs -n 1 git push --delete origin
 

Yerel etiketleri temizle

 git tag -l | xargs git tag -d
 

99







Etiketi uzak havuzdan kald─▒rmak i├žin:

 git push --delete origin TAGNAME
 

Etiketi yerel olarak da silmek isteyebilirsiniz:

 git tag -d TAGNAME
 

30







Terminalinizden ┼čunu yap─▒n:

 git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
 

┼×imdi Github.com'a gidin ve yenileyin, yok olurlar.


24







Uzak etiket olarak adland─▒r─▒lan uzak bir ┼čubeniz varsa, ┼ču komutlar─▒n belirsiz oldu─čuna dikkat edin:

 git push origin :tagname
git push --delete origin tagname
 

Bu nedenle, etiketi silmek i├žin bu komutu kullanman─▒z gerekir:

 git push origin :refs/tags/<tag>
 

ve bu da ┼čubeyi silmek i├žin:

 git push origin :refs/heads/<branch>
 

Olmazsa, b├Âyle bir hata al─▒rs─▒n─▒z:

 error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
 

14







'12345' yerel etiketini sil

 git tag -d 12345
 

'12345' uzak etiketini silin (├Ârne─čin; GitHub s├╝r├╝m├╝ de)

 git push origin :refs/tags/12345
 

Alternatif yakla┼č─▒m

 git push --delete origin tagName
git tag -d tagName
 


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


14







 git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
 

─░lk sat─▒r your_tag_name yerel repodan, ikincisi ise uzak repodan siler. ┼×imdi, etiketiniz hem yerel hem de uzak depodan tamamen silindi, ancak bazen s├╝r├╝m b├Âl├╝m├╝n├╝zde Elle GitHub taraf─▒ndan haz─▒rlanan silinmi┼č etiketi kald─▒rman─▒z gerekebilir.


11







release01 Git havuzunda ad─▒ verilen bir etiket olu┼čturduysan─▒z , a┼ča─č─▒dakileri yaparak depodan ├ž─▒kart─▒rs─▒n─▒z:

 git tag -d release01 
git push origin :refs/tags/release01 
 

Birini Mercurial havuzundan ├ž─▒karmak i├žin:

 hg tag --remove featurefoo
 

L├╝tfen https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551


9







Binlerce uzaktan etiket i├žin 100 kata kadar daha h─▒zl─▒ y├Ântem

Bu cevaplar─▒ okuduktan sonra 11.000'den fazla etiketi silmeye ihtiya├ž duydu─čumda xargs , yakacak saatiniz olmad─▒k├ža bu metotlara g├╝venmeyi ya da ├žok uzun s├╝rmeyi ├Â─črendim .

M├╝cadele, iki daha h─▒zl─▒ yol buldum . Her ikisi i├žin de, uzaktan kumandadan silmek istedi─činiz etiketlerin bir listesini yapmak i├žin git tag veya ile ba┼člay─▒n git ls-remote --tags . A┼ča─č─▒daki ├Ârneklerde istedi─činiz sorting_proccessing_etc herhangi bir grep ing, sort ing, tail ing veya head ing ( ├Ârne─čin, grep -P "my_regex" | sort | head -n -200 vb. ) Atlayabilir veya de─či┼čtirebilirsiniz.


Bu ilk y├Ântem, en h─▒zl─▒d─▒r , belki kullanmaktan 20 ila 100 kat daha h─▒zl─▒d─▒r ve bir kerede en xargs az birka├ž bin etiketle ├žal─▒┼č─▒r .

 git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
 

Bu nas─▒l ├žal─▒┼č─▒yor? Normal, sat─▒rla ayr─▒lm─▒┼č etiket listesi, her biri ├Ânceden haz─▒rlanm─▒┼č tek bir bo┼člukla ayr─▒lm─▒┼č etiket sat─▒r─▒na d├Ân├╝┼čt├╝r├╝l├╝r : . . .

 tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3
 

git push Bu format etiketi ile birlikte kullanmak her uzak referansa hi├žbir ┼čeyi iterek onu siler (bu ┼čekilde bast─▒rmak i├žin normal formatt─▒r local_ref_path:remote_ref_path ).

─░kinci y├Ântem, ayn─▒ sayfada ba┼čka bir yerde ayr─▒ bir cevap olarak ayr─▒ld─▒https://stackoverflow.com/a/46105020/657764


Her iki y├Ântemden sonra da muhtemelen yerel etiketlerinizi de silmek istersiniz. Kulland─▒─č─▒m─▒z d├Ânebilirsiniz b├Âylece bu ├žok daha h─▒zl─▒d─▒r xargs ve git tag -d yeterli olan.

 git tag | sorting_processing_etc | xargs -L 1 git tag -d
 

VEYA uzaktan silme i┼člemine benzer:

 git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
 

9







SourceTree'yi (harika bir Git GUI) kullan─▒yorsan─▒z, a┼ča─č─▒dakileri yaparak bunu komut sat─▒r─▒ olmadan kolayca yapabilirsiniz:

  1. Deponuzu SourceTree'de a├ž─▒n
  2. Soldaki "Etiketler" sekmesini se├žin ve geni┼čletin
  3. Silmek istedi─činiz etikete sa─č t─▒klay─▒n
  4. "YOUR_TAG_NAME adl─▒ kullan─▒c─▒y─▒ sil" se├žene─čini se├žin
  5. Do─črulama penceresinde, "Uzaktan Etiket Etiketi Kald─▒r" ─▒ se├žin.

YOUR_TAG_NAME art─▒k yerel deponuzdan ve t├╝m uzaktan kumandalar─▒n─▒zdan kald─▒r─▒lacak - GitHub, BitBucket veya ba┼čka bir yerde, o havuz i├žin uzak olarak listeledi─činiz yerler.

Ayr─▒ca, bir etiketi yerel olarak sildiyseniz ancak uzaktaki kaynaklardan de─čil, her yerden silmek istiyorsan─▒z, yaln─▒zca ayn─▒ ada sahip ve ayn─▒ k├Âkene ba─čl─▒ olarak eklenmi┼č yeni bir etiket olu┼čturun. Ard─▒ndan, her yeri silmek i├žin yukar─▒daki ad─▒mlar─▒ tekrarlay─▒n.


8







Di─čer cevaplar bunun nas─▒l ba┼čar─▒laca─č─▒na i┼čaret ediyor, ancak bunun uzak bir depo oldu─ču i├žin sonu├žlar─▒ akl─▒n─▒zda tutmal─▒s─▒n─▒z.

Yeniden Etiketleme b├Âl├╝m├╝ndeki git etiketi man sayfas─▒, uzak repodaki de─či┼čiklikleri di─čer kullan─▒c─▒lara nezaketle bildirmenin iyi bir a├ž─▒klamas─▒d─▒r. Hatta ba┼čkalar─▒n─▒n de─či┼čikliklerinizi nas─▒l almas─▒ gerekti─čini bildirmek i├žin kullan─▒┼čl─▒ bir duyuru ┼čablonu bile veriyorlar.


6







Bir kal─▒pla e┼čle┼čen etiketler d─▒┼č─▒ndaki t├╝m etiketleri kald─▒rmak istedim, b├Âylece son birka├ž ayd─▒r ├╝retim etiketlerini silebilirdim, i┼čte b├╝y├╝k ba┼čar─▒ i├žin kulland─▒─č─▒m ┼čey:

T├╝m Uzak Etiketleri Sil ve ─░fadeyi Sil'den D─▒┼čla

 git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
 

T├╝m Yerel Etiketleri Sil ve ─░fadeyi Sil'den D─▒┼čla

 git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
 

6







@CubanX'in ├Ânerdi─či gibi, bu cevab─▒ orijinalimden ay─▒rd─▒m:

─░┼čte birka├ž kat daha h─▒zl─▒ olan xargs ve tweaking ile daha fazla ├Âl├žeklenebilen bir y├Ântem . Ki┼čisel bir eri┼čim belirteci olan Github API'sini kullan─▒r ve yard─▒mc─▒ programdan yararlan─▒r parallel .

 git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \ 
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H 
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\"  \
-H \"cache-control: no-cache\"`
 

parallel Bir├žok ├žal─▒┼čma moduna sahiptir, ancak genellikle i┼člem say─▒s─▒yla ilgili s─▒n─▒rlar─▒ belirlemenize izin verirken verdi─činiz komutlar─▒ paralelle┼čtirir. Daha --jobs 2 h─▒zl─▒ ├žal─▒┼čmaya izin vermek i├žin parametreyi de─či┼čtirebilirsiniz , ancak ┼ču an 5000 / saat olan Github'un h─▒z limitleriyle ilgili problemlerim vard─▒ , fakat ayn─▒ zamanda belgelenmemi┼č bir k─▒sa vadeli limiti de var.


Bundan sonra, muhtemelen yerel etiketlerinizi de silmek istersiniz. Kulland─▒─č─▒m─▒z d├Ânebilirsiniz b├Âylece bu ├žok daha h─▒zl─▒d─▒r xargs ve git tag -d yeterli olan.

 git tag | sorting_processing_etc | xargs -L 1 git tag -d
 

5







Verilen etiketi hem yerel hem de ba┼člang─▒├ž ÔÇőÔÇőkonumlar─▒ndan kald─▒rmak i├žin basit komut dosyas─▒. Etiketi ger├žekten olup olmad─▒─č─▒n─▒ kontrol edin.

 if [ $(git tag -l "$1") ]; then
    git tag --delete  $1
    git push --delete origin $1

    echo done.
else
    echo tag named "$1" was not found
fi
 

Nas─▒l kullan─▒l─▒r:

  • Kabuk komut dosyas─▒ olu┼čturun (├Ârn. Git-tag-purge.sh) ve i├žeri─či yap─▒┼čt─▒r─▒n.
  • komut dosyas─▒ dosyan─▒z─▒ ├žal─▒┼čt─▒r─▒labilir hale getirmek i├žin chmod.
  • Senaryoyu global olarak kullan─▒labilir yap
  • git projene cd
  • ├ça─čr─▒ komut dosyas─▒ (├Ârne─čin
    $> git-tag-purge.sh tag_name
    )

4







xargs Zaten yapt─▒─č─▒ bir ┼čey i├žin ├žok i┼č gibi g├Âr├╝n├╝yor . Bu konuya bakt─▒─č─▒mda, xargs deneyimledi─činiz yava┼čl─▒─č─▒ tahmin ediyorum , ├ž├╝nk├╝ xargs -n 1 ger├žekten gerekmedi─činde kullan─▒lan orijinal cevap .

Bu, xargs maksimum komut sat─▒r─▒ uzunlu─čuyla otomatik olarak ilgilenmesi d─▒┼č─▒nda, y├Ânteminize e┼čde─čerdir :

 git tag | sorting_processing_etc | xargs git push --delete origin
 

xargs i┼člemleri paralel olarak da ├žal─▒┼čt─▒rabilir. Y├Ântem 2 ile xargs :

 git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
 

Yukar─▒dakiler, her bir i┼člemde maksimum 100 arg├╝man─▒ ele almak i├žin maksimum 5 i┼člem kullan─▒r. Gereksinimlerinize en uygun olan─▒ bulmak i├žin arg├╝manlar─▒ deneyebilirsiniz.


4







PowerShell kullan─▒yorsan─▒z ve bir demetini silmek istiyorsan─▒z:

 # Local tags:
git tag -l | foreach { git tag -d $_ }

# Remote tags:
git tag -l | foreach { git push --delete origin $_ }
 

Elbette, silmeden ├Ânce onlar─▒ da filtreleyebilirsiniz:

 git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
 

4







# Karakteriyle ba┼člayan bir etiketiniz varsa , ├Ârne─čin #ST002 , normal desenleri kullanarak silemedi─činizi g├Ârebilirsiniz. yani

 git tag -d #STOO2
 

Etiketi silmek, ancak bir sararak olmaz Dize da De─či┼čmez ┼č├Âyle

 git tag -d "#ST002" or git tag -d '#ST002'
 

Bu silinecek. Bunu ├╝mit etmek, # etiket adlar─▒n─▒ yazmak i├žin # kullanarak hata yapm─▒┼č birisine yard─▒mc─▒ olacakt─▒r .


2







Uzaktan kumanda ile u─čra┼čmadan yerel olarak test etmek i├žin yerel bir test ├žantas─▒:

 ~/p $ mkdir gittest    
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
 ~/p/gittest $ touch testfile.txt
 ~/p/gittest $ git add testfile.txt
 ~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 testfile.txt
 ~/p/gittest $ git tag
 ~/p/gittest $ git tag -a testtag
 ~/p/gittest $ git tag
testtag
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
 ~/p/gittest $ cd ..
 ~/p $ mkdir gitbare
 ~/p $ cd gitbare
 ~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
 ~/p/gitbare $ cd ..
 ~/p $ cd gittest/
 ~/p/gittest $ git remote add origin /Users/local_user/p/gitbare
 ~/p/gittest $ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
 ~/p/gittest $ git push origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
 * [new tag]         testtag -> testtag
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
 ~/p/gittest $ git push -d origin testtag
To /Users/local_user/p/gitbare
 - [deleted]         testtag
 ~/p/gittest ţé░ ţéá ţé░ git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
 ~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
 ~/p/gittest
 

2







Merhaba, ayn─▒ ┼čeyi yapan olu┼čturdu─čum takma ad─▒ payla┼čmak istedim:

A┼ča─č─▒dakileri ~ / .gitconfig dosyas─▒na ekleyin

 [alias]
    delete-tag = "!f() { \
            echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
            git push --delete origin $1; \
            echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
            git tag -d $1; \
        }; f"
 

Kullan─▒m gibi g├Âr├╝n├╝yor:

 -->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
 - [deleted]             v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)
 

1