2012-03-12 15 views

Odpowiedz

3

git fetch --tags zrobi to.

Z docs (opis parametru --tags):

Większość znaczników są pobierane automatycznie jako szefowie oddziałów są pobierane, ale znaczniki, które nie wskazują na obiekty oddalone od szefów oddziałów, które toczy się śledzone nie zostanie pobrane przez ten mechanizm. Ta flaga umożliwia pobranie wszystkich tagów i powiązanych z nimi obiektów. Domyślne zachowanie dla pilota można określić za pomocą ustawienia remote..tagopt.

+0

Ale pytam jak nadpisać istniejące zmienne lokalne, ponieważ zostały one błędnie utworzony – linquize

+1

'git sprowadzić --tags' będzie w rzeczywistości aktualizacji istniejących lokalnych tagów, np jeśli zdalny znacznik FOO odwzorowuje na 1234567 i lokalny znacznik FOO odwzorowuje na fedcba9, 'git fetch --tags' zastąpi FOO 1234567. – torek

+0

Aktualizacja: w nowszych wersjach gita, to nie będzie już aktualizować lokalnych znaczników. Zamiast tego możesz wymusić ich aktualizację za pomocą 'git fetch '+ refs/tags/*: refs/tags/*'' ('--force' również może działać, ale tego nie przetestowałem). – torek

-1

Tagi nie zostaną nadpisane, ponieważ mają być niezmienne. Jeśli chcesz mieć obiekt, który jest (realistycznie) zmienny, użyj wskaźnika gałęzi lub ref. Zostaje ci: git tag -d zmienna ..., a następnie pobieranie jej ponownie.

+0

Nie zgadzam się z twoim pierwszym stwierdzeniem - To by zakłóciło cały sens używania VCS, nie sądzisz? – lightonphiri

+0

Git nie zachęca do ponownego napisania (już udostępnionej, zdalnej) historii. To nie pokona punktu VCS - czyli utrzymania historii! W większości przypadków można wymusić takie rzeczy, ale może to spowodować wiele problemów. –

4

git fetch --tags --all --prune

Będzie to wyraźnie powiedzieć git do pobrania, a jednocześnie, usunąć znaczniki, które już nie istnieją na pilocie.

+1

Nie wydaje się, aby usunąć znaczniki, które były obecne tylko lokalnie. –

+0

@MartijnHeemels, git nie może odróżnić tagu, który nigdy nie został wypchnięty, od tagu usuniętego z pilota. –

0

Po pierwsze, w przeciwieństwie do gałęzi, git nie śledzi tagów zdalnych różniących się od tagów lokalnych. Po zakończeniu pobierania są nie do odróżnienia.

  • robi zaktualizować tag lokalnego (choć instrukcja nie mówi)
    • git fetch --tags
  • nie aktualizuje znacznik lokalny
    • git fetch
    • git fetch --prune
    • git fetch --prune --force

Znacznik aktualizacja/nadpisywania wygląda następująco:

From git:path/name 
- [tag update]  my_tag -> my_tag 

Działa to dla lekkich i adnotacjami tagi, nawet mieszanych. Oznacza to, że znacznik z adnotacją może zostać zastąpiony tagiem lightweight i vice versa.

użyłem git wersję 2.7.4

+0

uwaga: to nie usuwa znaczniki, które zostały usunięte na zdalnym –

+0

@CarlosHeuberger Twój komentarz sugeruje, że istnieje sposób, aby to zrobić, ale nie ma. Można rzeczywiście usunąć wszystkie lokalne znaczniki nieistniejące na zdalnym, ale to również usuwa znaczniki _lokalne, które nigdy nie były na zdalnym serwerze (np. Jeszcze nie zostały wypchnięte lub znaczniki do celów lokalnych). Nie ma sposobu, aby usunąć tylko te znaczniki, które _deleted na remote_. –

+0

Nie wiem, dlaczego uważasz, że mój komentarz sugeruje, że - nigdy nie napisałem, że jest sposób na zrobienie tego!?. Próbowałem tylko uzupełnić twoją odpowiedź, ponieważ nigdzie nie stwierdza się, że tagi lokalne nie są usuwane i "aktualizuje tag lokalny" może być rozumiane jako usunięcie znacznika, który został usunięty na pilocie. Myślę, że to było jasne stwierdzenie (bez żadnych ukrytych sugestii) ... ale mój angielski jest prawdopodobnie gorszy niż myślę. –

Powiązane problemy