2012-02-17 8 views
10

Stworzyliśmy tag "2012/02/16" na naszym repozytorium git. Zauważyliśmy, że wewnątrz drzewa źródeł 2012 i 01 były reprezentowane jako foldery, które można było starannie otwierać i zamykać, aby odsłonić i ukryć znaczniki. Posiadanie zagnieżdżonej hierarchii tagów wydaje się być dobrym sposobem na uporządkowanie tagów zamiast posiadania tylko jednej listy płaskiej.Czy są problemy z umieszczeniem "/" w nazwie znacznika git w celu utworzenia znaczników hierarchicznych/zagnieżdżonych?

Czy jest jakiś problem z robieniem tego?

Kiedy zrobić git ls-pilota widzę następujące wpisy:

8430572c89362b875109628c33a18e782aa38488 refs/tags/2012/02/16 
d247e38159c8c4998bf8b555edfd7ffe7b945255 refs/tags/2012/02/16^{} 

Nie jestem pewien, co^{} znaków na koniec drugiego tagu myśli i chcę się upewnić, że takie zachowanie, na które natknęliśmy się, nie jest czymś, czego nie powinniśmy robić, zanim pójdziemy i wykorzystać go do oczyszczenia naszych tagów.

Nie widzimy znaków^{} w naszych tagach "niezagrożonych".

+3

'^ {}' jest skróconą składnią do dereferencji tagu rekurencyjnie, dopóki nie znajdzie obiektu nie tagu. Jeśli nie widzisz go na swoich innych tagach, może to oznaczać, że Twoje inne tagi to tagi lekkie zamiast tagów adnotowanych. –

Odpowiedz

8

Nie ma problemu, używanie ukośnika jest standardową praktyką, na przykład w dyscyplinie "git-flow". Można sprawdzić zasady kolorowania nazw znaczników na stronie podręcznika git-check-ref-Format (1): http://schacon.github.com/git/git-check-ref-format.html

Daszek ze wspornikami jest coś git stara się opowiedzieć o tym tagiem, a nie coś wpisane . można interpretować go za pomocą strony podręcznika gitrevisions (7): http://schacon.github.com/git/gitrevisions.html

+0

Notatka do OP: użycie ukośnika jest całkowicie w porządku i możesz * myśleć * o tym jako o zagnieżdżaniu, ale żadne polecenia git nie potraktują twojego zestawu znaczników jako hierarchii. Tak po prostu są przechowywane. – Cascabel

10

Jedynym problemem natkniesz jest bezużyteczny komunikat o błędzie, jeśli spróbuje utworzyć tag, który koliduje z „katalogu” w hierarchii (spowodowane bezpośrednio przez katalogów git używa do przechowywania tagów kolidujących):

% git tag foo/bar 
% git tag foo 
error: there are still refs under 'refs/tags/foo' 
fatal: refs/tags/foo: cannot lock the ref 

jest mało prawdopodobne, aby być problemem w praktyce jest zazwyczaj pojawia się, gdy ludzie spróbować zrobić:

v0.0.1/rc1 
v0.0.1/rc2 
v0.0.1/beta1 
v0.0.1/beta2 

wtedy, Spróbuj i tag v0.0.1, który dotknie powyższy problem.

+0

Dziękuję bardzo! Miałem commit oznaczony "1.3.39/40" i próbowałem go powtórzyć jako 1.3.39 i 1.3.40 oddzielnie, więc wpisałem 'git tag 1.3.39 -am" Wersja 1.3 Wersja 39 "1.3.39/40 'i dostał ten błąd. Po prostu usunięcie znacznika z ukośnikiem, a następnie dodanie nowego znacznika, podając wartość skrótu zatwierdzenia, rozwiązującą problem. – Dan

1

Oprócz problemu związanego z kolizją plików/katalogów istnieje również problem z rozróżnianiem wielkości liter. Jeśli korzystasz z systemu plików niewrażliwego na wielkość znaków, takiego jak Windows i Mac OS X, możliwe jest posiadanie znaczników na zdalnym repozytorium, którego nie można pobrać/wyciągnąć. Na przykład następujący będzie kolidować:

archive/some-tag-or-other 
Archive/a-different-tag 

jak podczas git tworzy drugi tag faktycznie pobiera umieścić w katalogu .git/refs/tags/archive. Gdy będziesz w tym stanie, kolejne pobrania/wyciągnięcia będą nieustannie próbowały ponownie pobrać drugi znacznik.

Istnieje jednak proste obejście tego problemu, polegające na uruchomieniu git pack-refs, które łączy poszczególne pliki ref w pliku zwykłego tekstu .git/packed-refs. Po uruchomieniu tego pliku indywidualny tag pierwszego tagu zostanie usunięty wraz z katalogiem .git/refs/tags/archive, a następnie drugi tag może zostać pomyślnie pobrany/pobrany.

+0

Nie związane z pytaniem. Znaczniki 'Some-tag' i' some-tag' spowodują to samo, bez żadnych folderów. – Chronial

Powiązane problemy