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?


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/*

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.


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

2
git pull --forcenie obejmujegit fetch --tags --force
Geniy

21

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

git pull --tags

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


1

Używam tego z magitem na kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.