2014-10-15 26 views
36

Mam komunikat o błędzie podczas tworzenia znacznik zawierający [ charakter:Jakie nazwy są poprawnymi tagami git?

śmiertelny: „[” nie jest poprawną nazwą znacznika.

Pytanie: czy są jakieś reguły dla tagów w git?

Odpowiedz

48

Można sprawdzić, czy nazwa jest ważna z

git check-ref-format 

Ten page zawiera ograniczenia dotyczące prawidłowej nazwy. Cytowane od strony (ewentualnie przestarzałe w przyszłości):

  1. Mogą to ukośnik / hierarchicznej (katalog) grupy, ale bez składnika ukośnik oddzielone może rozpocząć kropką . lub koniec z sekwencją .lock.

  2. Muszą zawierać co najmniej jeden /. Wymusza to obecność kategorii takiej jak heads/, tags/ itd., Ale rzeczywiste nazwy nie są ograniczone. Jeśli użyta zostanie opcja --allow-onelevel, ta reguła zostanie zniesiona.

  3. Nie mogą mieć dwóch kolejnych kropek .. w dowolnym miejscu.

  4. Nie mogą one mieć znaki sterujące ASCII (czyli bajtów, których wartości są niższe niż 040 \ lub \ 177 DEL), przestrzeń, tylda ~, daszek ^ lub okrężnicy : wszędzie.

  5. Nie mogą mieć znaku zapytania ?, gwiazdka * lub dowolnego wspornika otwartego [. Zapoznaj się z poniższą opcją --refspec-pattern, aby uzyskać wyjątek od tej reguły.

  6. Nie można rozpocząć lub kończyć kreską / lub zawierają wiele kolejnych ukośnik (patrz opcja --normalize poniżej za wyjątkiem od tej reguły)

  7. Nie można zakończyć kropką ..

  8. Nie mogą zawierać sekwencji @{.

  9. Nie mogą być pojedynczą postacią @.

  10. Nie mogą zawierać \.

Jak widać, w przypadku, gdy naruszone reguły (5).

Możesz użyć flagi --normalize normalizować tagów względem ukośniki (usunięto wiodące ukośniki, jak również kolejnych nich):

git check-ref-format --normalize "tags/weird//tag" 

The tags/ części gatunków, które są sprawdzania poprawności tag.

Po krótkiej dyskusji z @NikosAlexandris, można napisać następującą jedną wkładkę sprawdzić tag <some-tag> ze sprzężeniem zwrotnym tekstowego:

git check-ref-format "tags/<some-tag>" && echo "Valid tag" || echo "Invalid tag!" 
+1

Opcja --normalize faktycznie obsługuje tylko ukośniki. Nie działa dla innych problemów, takich jak obecność ~. –

+0

@VincentFourmond: w rzeczy samej program kończy się kodem wyjścia '1' (a więc błędem), może błąd? –

+3

Nie, zachowuje się zgodnie z oczekiwaniami ze strony podręcznika: 'Normalizuj nazwę, usuwając wszystkie znaki wiodące (/) i zwijanie przebiegów sąsiednich ukośników między składnikami nazw w pojedynczy ukośnik. Iff znormalizowana nazwa jest poprawna, a następnie wyślij ją na standardowe wyjście i wyjdź ze statusem 0. (--print jest przestarzałym sposobem na pisownię - unormalize). "To po prostu nie to, co mówisz; -) ... –