Uzaktan çekme sırasında tüm etiketleri almak için Git varsayılanını ayarlayabilir miyiz?


154

Şu anda aşağıdaki gibi bir git uzaktan kurulum var:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

Ben kesilirken git pullşube yöneticisinde, tüm uzak kafaları uzaktan kumanda içine getirilen / memba, daha sonra uzaktan kumanda / memba / ustası ustası birleştirilir. Ulaşılabilen etiketler de aynı anda getirilir, bu da çok uygundur.

git pullEk olarak , yalnızca kafalardan doğrudan erişilebilen etiketleri değil, uzaktan kumandadaki tüm etiketleri almak istiyorum . Başlangıçta ayarlamayı denedim tagopt == --tags, ancak bunun sadece etiketlerin getirilmesine ve böylece her şeyin kırılmasına neden oldu. (Junio ​​bunun korkunç bir yanlış konfigürasyon olduğunu bile söylüyor ).

git pullUzak kafalara ek olarak varsayılan olarak tüm uzak etiketleri getirmenin bir yolu var mı ?


1
Kendime bir hatırlatma: Aslında etiketi ilk önce ittiğinizden emin olun (otomatik olarak çalışmaz): git push origin <tag_name>
Hafenkranich

tagoptÇözüm kullanmak artık yanlış bir yapılandırma değildir; 1.9 / 2.0 (1Ç 2014) itibarıyla , normalde getirilene ek olarak tüm etiketler getirilir.
mgiuffrida

Yanıtlar:


95

Bunu, yerel yapılandırmanıza etiketler için bir refspec ekleyerek başarabilmeniz gerekir. somut olarak:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*

5
Aha, birden fazla getirme hattınız olabileceğini hiç fark etmedim, sonuncunun sadece geçersiz kıldığını varsaydım. Bu çok hoş ve açık.
jleahy

1
Bunu git 2.21 ile kullanmaya dikkat edin, bkz. Apple.stackexchange.com/questions/352404/…
Vadorequest

306

Bir basit git fetch --tagsbenim için çalıştı.


13
@Fizzix Belki de başlık "varsayılan olarak" içerecek şekilde değiştirilmelidir. Bu gönderi sorumu yanıtladı.
Matt Kneiser

2
Bu benim için işe yaramadı. Etiketleri ile görebiliyorum git ls-remote.
dangeroushobo

Bu kesin soruya cevap vermeyebilir, ancak başlıktaki soruya cevap verir ve ben bunu web aramasıyla buldum.
Hubert Grzeskowiak

68

Bu --forceseçenek, yerel etiketleri yenilemek için kullanışlıdır. Temelde kayan etiketleriniz varsa:

git fetch --tags --force

Git çekme seçeneği de --forceseçeneklere sahiptir ve açıklama aynıdır:

Git fetch <rbranch>: <lbranch> refspec ile birlikte kullanıldığında, getirdiği uzak dal <rbranch> <lbranch> 'un torunu değilse yerel <lbranch> dalını güncellemeyi reddeder. Bu seçenek bu denetimi geçersiz kılar.

ancak, şu dokümana göre --no-tags:

Varsayılan olarak, uzak depodan indirilen nesnelere işaret eden etiketler getirilir ve yerel olarak depolanır.

Bu varsayılan ifade bir kısıtlama değilse, aynı zamanda

git pull --force

2
git pull --forcedahil değilgit fetch --tags --force
Geniy

21

Benim için aşağıdakiler işe yaradı.

git pull --tags

Yalnızca etiketleri getirerek, muhtemelen şunu demek istediniz: `git fetch --tags`
Yuseferi

İle zaten bir cevap var git fetch --tags. Alternatif bir cevap vermek istedim. pull = getirme + birleştirme. Yani getirme de olur.
Vasantha Ganesh K


1

Bunu kernel.org'da magit ile kullanıyorum

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.