Dzisiaj przeglądałem dzienniki projektu i zdałem sobie sprawę, że jakiś czas temu natknąłem się na nazwę tagu. Czy jest jakiś sposób na zmianę nazwy tagu? Google nie znalazł niczego przydatnego.
Zdaję sobie sprawę, że mogłem sprawdzić oznakowaną wersję i stworzyć nowy tag, nawet tego spróbowałem. Ale wydaje się, że tworzy to obiekt znacznika, który nie jest całkiem właściwy. Po pierwsze
git tag -l
wyświetla listę nie uporządkowaną względem wszystkich innych tagów. Nie mam pojęcia, czy to znaczące, ale prowadzi mnie do przekonania, że nowy obiekt znacznika nie jest dokładnie tym, czego chcę. Mogę z tym żyć, ponieważ naprawdę dbam tylko o to, aby nazwa znacznika była zgodna z dokumentacją, ale wolę zrobić to „dobrze”, zakładając, że jest to właściwy sposób.
git log --oneline --decorate --graph
jest pomocny podczas czyszczenia tagów.Odpowiedzi:
Oto jak zmienić nazwę tagu
old
nanew
:Dwukropek w poleceniu push usuwa znacznik ze zdalnego repozytorium. Jeśli tego nie zrobisz, Git utworzy stary znacznik na twoim komputerze, gdy go pociągniesz.
Na koniec upewnij się, że inni użytkownicy usuwają usunięty tag. Powiedz im (współpracownikom), aby uruchomili następujące polecenie:
Zauważ, że jeśli zmieniasz znacznik z adnotacjami , musisz upewnić się, że nazwa nowego znacznika odnosi się do bazowego zatwierdzenia, a nie starego obiektu znacznika z adnotacjami, który zamierzasz usunąć. Dlatego używaj
git tag -a new old^{}
zamiastgit tag new old
(to dlatego, że tagi z adnotacjami są obiektami, podczas gdy tagi lekkie nie są, więcej informacji w tej odpowiedzi ).źródło
git push origin :refs/tags/old
git push origin :old
myślę, że można to uprościć .git tag new old
spowoduje utworzenie znacznika wskazującego stary znacznik, a nie zatwierdzenie starego znacznika. (Zobacz Dlaczego nie mogę pobrać mojego tagu z Git GUI? )Oryginalny pytanie, jak zmienić nazwę znacznik, który jest prosty: najpierw utworzyć nowe jako alias starych:
git tag NEW OLD
następnie usunąć stare:git tag -d OLD
.Cytat dotyczący „sposobu Gita” i (nie) zdrowia psychicznego jest nie na miejscu, ponieważ mówi o zachowaniu nazwy znacznika, ale o odwołaniu go do innego stanu repozytorium.
źródło
git push origin
firmę.git tag new old
spowoduje utworzenie znacznika wskazującego stary znacznik, a nie zatwierdzenie starego znacznika. (Zobacz Dlaczego nie mogę pobrać mojego tagu z Git GUI? )Oprócz innych odpowiedzi:
Najpierw trzeba zbudować alias o starej nazwie znacznika, wskazując na oryginale popełnić:
Następnie musisz usunąć stary lokalnie :
Następnie usuń tag ze zdalnych lokalizacji:
Wreszcie musisz dodać nowy tag do zdalnej lokalizacji. Dopóki tego nie zrobisz, nowe tagi nie zostaną dodane:
Iteruj to dla każdej zdalnej lokalizacji.
Pamiętaj o konsekwencjach, jakie zmiana Git Tag ma dla konsumentów pakietu!
źródło
git tag new old
spowoduje utworzenie znacznika wskazującego stary znacznik, a nie zatwierdzenie starego znacznika. (Zobacz Dlaczego nie mogę pobrać mojego tagu z Git GUI? )git tag new old^{}
, nie będziemy potrzebowaćgit tag new_tag_name old_tag_name
(pierwszy krok).Jeśli jest opublikowany, nie można go usunąć (bez ryzyka smołowania i upierzania). „Sposób Git” polega na:
Alternatywnie,
To takie szalone, ponieważ:
Wszystko dzięki uprzejmości stron man .
źródło
Ta strona wiki ma ten interesujący jeden wiersz, który przypomina nam, że możemy przesłać kilka odnośników :
Pomysł polega więc na:
<new-tag>
dla każdego zatwierdzeń odwołuje<old-tag
>:<refs/tags/old-tag>:<refs/tags/new-tag>
,<old-tag>
::<refs/tags/old-tag>
Zobacz jako przykład „ Zmienić konwencję nazewnictwa tagów w repozytorium git? ”.
źródło
git cat-file -p <tag>
; dzięki twojej metodzie w moim systemie otrzymuję tag ref (<new-tag>
) o zmienionej nazwie , ale jego pole tagu jest nadal<old-tag>
.Jako dodatek do innych odpowiedzi, dodałem alias, aby zrobić to wszystko w jednym kroku, z bardziej znanym dotykiem polecenia * nix move. Argument 1 to stara nazwa znacznika, argument 2 to nowa nazwa znacznika.
Stosowanie:
źródło
!sh
(pytania dotyczące systemu Windows GIT), jednak po aktualizacji format do następujących, to działało:renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"
.Postępuj zgodnie z 3-etapowym podejściem do jednego lub kilku tagów.
Krok 1: Określ identyfikator zatwierdzenia / obiektu zatwierdzenia, na który wskazuje bieżący znacznik
Krok 2: Usuń tag z repozytorium
Krok 3: Utwórz nowy znacznik wskazujący ten sam identyfikator zatwierdzenia, na który wskazywał stary znacznik
Gdy lokalny git jest gotowy ze zmianą nazwy znacznika, zmiany te można odesłać z powrotem do źródła, aby inni mogli je pobrać.
źródło
git push origin :refs/tags/v0.1.0-Demo
i odepchnąć tagi (wraz z innymi sprawami w toku)git push --tags
Dla żądnych przygód można to zrobić za pomocą jednego polecenia:
źródło
git gc
cp
) z nietkniętą wiadomością opiekuna.Niezależnie od problemów związanych z wypychaniem tagów i zmianą nazw tagów, które zostały już wypchnięte, w przypadku, gdy tag do zmiany nazwy jest opatrzony adnotacjami , możesz go najpierw skopiować dzięki poniższemu wierszowi poleceń:
Następnie wystarczy usunąć stary tag:
Znalazłem ten wiersz poleceń dzięki następującym dwóm odpowiedziom:
Edycja:
Po napotkaniu problemów z automatyczną synchronizacją ustawień tagów
fetch.pruneTags=true
(jak opisano w https://stackoverflow.com/a/49215190/7009806 ), osobiście sugeruję najpierw skopiować nowy tag na serwerze, a następnie usunąć stary. W ten sposób nowy znacznik nie jest losowo usuwany podczas usuwania starego znacznika, a synchronizacja znaczników chciałaby usunąć nowy znacznik, który nie jest jeszcze na serwerze . Na przykład razem otrzymujemy:źródło
Możesz także zmienić nazwę zdalnych znaczników bez ich sprawdzania, powielając stary znacznik / gałąź do nowej nazwy i usuwając stary, w jednym
git push
poleceniu.Zdalne tag zmiany nazwy / Remote oddział → konwersja tag: (Wskazówka:
:refs/tags/
)Zdalny oddział rename / tag zdalnego → konwersja Branża: (Wskazówka:
:refs/heads/
)Wyjście zmieniające nazwę zdalnego tagu:
źródło