SORU
10 EKİM 2013, PERŞEMBE


“etiketi henüz gıt etiketi yeniden sonra uzaktan" hata var

Aşağıdaki adımları çalıştırdıktan sonra aşağıdaki hatayı alıyorum:

To git@provider.com:username/repo-name.git
 ! [rejected]        dev -> dev (already exists)
error: failed to push some refs to 'git@provider.com:username/repo-name.git'
hint: Updates were rejected because the tag already exists in the remote.
  1. Depo yarattı
  2. Yerel makinede repo klonlanmış.
  3. Modifiye README dosyası, değişiklikleri işlemiştir ve işlemeye itti.
  4. Oluşturulan etiketi dev: git tag dev
  5. İtti etiketler: git push --tags
  6. Modifiye README dosyası, değişiklikleri işlemiştir ve işlemeye itti.
  7. Silinmiş etiketi 8**, yeniden oluşturulan ve etiketler itti:

    git tag -d dev
    git tag dev
    git push --tags
    

Neden böyle oluyor?

Mac kullanıyorum. Linux kullanan arkadaşlarım (Ubuntu) bu sorun yok. git push --tags -f etiketi güncelleştirme zorlamak için kullanabilirsiniz biliyorum, ama bu tehlikeli (örneğin bir hata yapılmış dalında sadece etiketinde işlemek, yeniden yazma).

CEVAP
10 EKİM 2013, PERŞEMBE


Ne zaman sana sormak push etiketleri, git push --tags gönderir (birlikte birini yapması ve gerekli diğer nesneleri ve diğer ref güncellemeleri push ayarları) uzaktan bir güncelleme talep formu new-sha1 refs/tags/name. (Eh, pek çok gönderir ancak: her tag için bir tane.)

Güncelleştirme isteği eklemek için uzaktan kumanda ile değiştirilirold-sha1(ya da yine, her etiket için bir tane), sonra ön almak ve ya kanca/güncelleme teslim uzaktan kumanda üzerindeki kancalar var hangisi). Bu kanca izin vermek veya reddetmek için karar etiket/silme/güncelleme oluşturabilirsiniz.

old-sha1değeri tamamen sıfır "boş ise etiketi oluşturulursa" SHA-1.new-sha1eğer etiketi silinirse boş SHA-1. Aksi takdirde SHA-1 değerleri hem gerçek, geçerli değerlerdir.

Hatta hiçbir kanca, bir nevi "yerleşik kanca" o da:) özelliklerini reddetme hareket etiketi sürece kullandığınız "kuvvet" bayrak (gerçi bu "yerleşik kanca" her zaman OK ile "Ekle" ve "Sil"). Gördüğünüz bu yerleşik kanca geliyor. (Bu arada, bu aynı yerleşik kanca da hızlı ileri olmayan şube güncellemeleri reddeder.)1

Ama işte bir konu tuşlarını anlayış ne oluyor—git push adım yok fikir olsun uzak olan etiketi şimdi, ve eğer öyleyse, ne SHA-1 değeri vardır. Sadece diyor ki "burada etiketler, SHA-1 değerleri ile birlikte tam benim listem". Uzak ve eğer eklemeler ve/veya değişiklikler varsa, o kancaları çalışır değerlerini karşılaştırır. (Aynı etiketleri için hiç bir şey yapmaz. Onlar bunu yapmak zorunda değilsin etiketleri için de hiçbir şey yapmaz!)

Eğer etiketi yerel silerseniz, o zaman push, bas sadece etiketi aktarmaz. Uzaktan herhangi bir değişiklik yapılması gerektiğini varsayar.

Eğer sen sil etiketi yerel, sonra yaratmak işaret için yeni bir yer, Daha sonra push, bas transferler etiketi, ve uzaktan görür bu gibi bir etiketi değiştirmek ve reddeder değişiklik olmadığı sürece bir kuvvet-itme.

Böylece, iki seçeneğiniz vardır:

  • bir kuvvet-itme ya
  • uzaktan kumanda üzerindeki etiketi silin.

İkincisigit push ile mümkün2yerel etiketi silme ve pushıng etkisi olsa bile. Uzaktan ismini değiştirdiğini origin dev silmek istediğiniz etiket:

git push origin :refs/tags/dev

Bu uzak bir etiketi silmek için sorar. Varlığı veya yerel depo dev ilgisizdir etiketinin olmaması; bir refspec olarak :remoteref 25*,, bu tür saf-delete bas.

Uzak olabilir ya da etiketi silme (herhangi bir ekstra kanca bağlı olarak eklenmiştir) izin vermeyebilir. Eğer izin silme, tag gitmiş olacak, ve bir saniye git push --tags ne zaman bir yerel dev tag işaret eden bazı işlemek veya açıklamalı etiketi repo nesne, gönderme dev etiket. Uzak, dev şimdi uzak muhtemelen push (yine bu herhangi bir ekstra kancalar eklendi bağlıdır) sağlayacak şekilde yeni oluşturulan bir etiket olacaktır.

Daha basit kuvvet-itme. Emin olmak istiyorsandiğeretiketi daha, sadece git push sadece bir refspec olduğunu söylesin:

git push --force origin refs/tags/dev:refs/tags/dev

(Not: Eğer açıkça sadece bir etiket-spec ref) zorluyorsun --tags ihtiyacın yok.


1Elbettenedenibunun için yerleşik bir kanca aynı uzak-repo diğer kullanıcıların davranışı uygulamak yardımcı olmaktır: bu dallar yeniden sardı ve etiketleri hareket ettirmeyin. Eğer kuvvet-itme, doğru, böylece diğer kullanıcılar bu yaptığınızı bildirin. "Etiketler hiç kıpırdama" yeni gıt tarafından zorlanır 1.8.2; önceki sürümleri etiketi "ileri" grafik, çok şube adları gibi işlemek. hareket etmek için izin vermez unutmayın git 1.8.2 release notes bkz.

2Eğer uzaktan kumanda üzerindeki giriş yapabilirsiniz Eğer kayda değer değil. Sadece git depo oraya gidin ve git tag -d dev çalıştırın. Unutmayın her halükarda—silme etiketi üzerinde uzaktan ya da kullanan git push sil—bir süre zaman herkes kim erişir uzak olur bulmak dev etiketi eksik.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brandon McCrary

    Brandon McCr

    15 Ocak 2012
  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • Perihelion

    Perihelion

    23 NİSAN 2008