Czy możemy ustawić domyślne Git, aby pobierać wszystkie tagi podczas zdalnego ściągania?

153

Obecnie mam zdalną konfigurację Git, taką jak następująca:

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

Kiedy wysyłam git pullna gałąź master, wszystkie zdalne głowice są pobierane do pilotów / nadrzędnych, a następnie zdalne / nadrzędne / główne są łączone w nadrzędne. Wszelkie tagi, do których można dotrzeć, są również pobierane w tym samym czasie, co jest bardzo wygodne.

Chciałbym git pulldodatkowo pobrać wszystkie tagi z pilota, a nie tylko te, które są bezpośrednio osiągalne z głowic. Początkowo próbowałem to ustawić tagopt == --tags, ale okazało się, że powoduje to pobieranie tylko tagów, a tym samym wszystko psuje. (Junio ​​mówi nawet, że to straszna błędna konfiguracja ).

Czy istnieje sposób, aby git pulldomyślnie pobierać wszystkie zdalne tagi, oprócz zdalnych głowic?

jleahy
źródło
1
Przypomnienie dla siebie: upewnij się, że faktycznie nacisnąłeś tag jako pierwszy (nie działa automatycznie): git push origin <tag_name>
Hafenkranich
Korzystanie z tagoptrozwiązania nie jest już błędną konfiguracją; od 1.9 / 2.0 (Q1 2014) spowoduje to pobranie wszystkich tagów oprócz tego, co jest zwykle pobierane.
mgiuffrida

Odpowiedzi:

95

Powinieneś być w stanie to osiągnąć, dodając refspec dla tagów do twojej lokalnej konfiguracji. Konkretnie:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
joshtkling
źródło
5
Aha, nigdy nie zdawałem sobie sprawy, że możesz mieć wiele linii pobierania, przypuszczałem, że ostatnia po prostu zastąpi. To bardzo miłe i wyraźne.
jleahy
1
Uważaj na używanie tego z git 2.21, zobacz apple.stackexchange.com/questions/352404/ ...
Vadorequest
306

Prosty git fetch --tagsdziałał dla mnie.

russoue
źródło
13
@Fizzix Być może tytuł powinien zostać zmieniony tak, aby zawierał „domyślnie”. Ten post odpowiedział na moje pytanie.
Matt Kneiser
2
To nie zadziałało dla mnie. Widzę tagi z git ls-remote.
dangeroushobo
To może nie odpowiadać dokładnie na pytanie, ale odpowiada na pytanie w tytule i tak znalazłem to poprzez wyszukiwanie w Internecie.
Hubert Grzeskowiak
68

--forceOpcja jest przydatna do odświeżenia lokalne tagi. Głównie jeśli masz pływające tagi:

git fetch --tags --force

Opcja git pull ma również --forceopcje, a opis jest taki sam:

Kiedy git fetch jest używany z <rbranch>: <lbranch> refspec, odmawia aktualizacji lokalnej gałęzi <lbranch>, chyba że zdalna gałąź <rbranch>, którą pobiera, jest potomkiem <lbranch>. Ta opcja zastępuje to sprawdzenie.

ale zgodnie z dokumentem --no-tags:

Domyślnie tagi wskazujące na obiekty pobierane ze zdalnego repozytorium są pobierane i przechowywane lokalnie.

Jeśli to domyślne stwierdzenie nie jest ograniczeniem, możesz również spróbować

git pull --force
yucer
źródło
2
git pull --forcenie obejmujegit fetch --tags --force
Geniy
21

Dla mnie wydawało się, że działa.

git pull --tags
Vasantha Ganesh K.
źródło
Pobieranie samych tagów, prawdopodobnie miałeś na myśli: `git fetch --tags`
Yuseferi
Jest już odpowiedź z git fetch --tags. Chciałem udzielić alternatywnej odpowiedzi. pull = pobierz + scal. Tak też się dzieje.
Vasantha Ganesh K
13

To proste. Zrób

git fetch - all

amulamul
źródło
1

Używam tego z magitem na kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
zdarzenie
źródło