2011-02-06 10 views
31

Używam git 1.7.1 na Ubuntu 10.10 amd64, a ja próbuję wyodrębnić hash mojego repozytorium HEAD, aby użyć go w automatycznej informacji o wersji, którą skompilowałem do mojego projektu.git opis nie powiódł się z "fatal: nie znaleziono żadnych nazw, nic nie można opisać."

W przeszłości, to zawsze działało za pomocą

git describe --tags 

jednak git jest teraz rzuca

fatal: No names found, cannot describe anything. 

na mnie. Czy ktoś ma pojęcie, co to znaczy?

Google pokazał tylko kilka trafień i nie ma rozwiązania.

+1

"Próbuję wyodrębnić ma z mojego repozytorium HEAD" nie analizuje. – nes1983

+0

@nes: OP oznacza prawdopodobnie hash. – Cascabel

+0

Czy rzeczywiście chcesz tylko skrót, czy informacje zebrane przez git są dla ciebie przydatne? Najnowszy tag i liczba pośrednich zatwierdzeń są znacznie bardziej czytelne dla człowieka niż SHA1. @nes: Możesz cofnąć odpowiedź, ponieważ może to być dokładnie to, czego potrzebuje OP - trudno powiedzieć. – Cascabel

Odpowiedz

33

Jeśli chcesz mieć identyfikator, jeśli Twój HEAD to nie potrzebujesz describe, powinieneś po prostu użyć rev-parse.

git rev-parse HEAD 

Jeśli chcesz skróconą mieszania można użyć --short.

git rev-parse --short HEAD 

Jeśli chcesz „opisać” spaść z powrotem do skróconej hash, jeśli nie można znaleźć żadnych odpowiednich znaczników, można użyć --always.

git describe --always 
+0

Tak, to zwraca hasz, ale to, czego akurat chcę, to skrócony skrót, który jest zwykle zwracany przez git-describe, który ma około 8 znaków lub tak – Philipp

+1

@Philipp: 'git opisać' zwykle zwraca ciąg znaków oparty na tagach składający się z nazwy znacznika, liczby zatwierdzeń i przyrostka na podstawie wartości skrótu. Zwykle nie zwraca skróconego skrótu, więc nie jestem do końca pewien, o co pytasz. –

27

Brzmi jak czekasz git-describe obejmuje najnowszą etykietę i numer zobowiązuje Od tego tagu. Jednak wiadomość fatal: No names found oznacza, że ​​w Twoim repozytorium nie ma żadnych tagów. Musisz mieć co najmniej jeden tag w historii commitów, aby git describe mógł przekazać ci najnowszy tag.

Po prostu zgaduję, ale być może oznakowałeś zatwierdzenie gdzieś indziej, ale nigdy nie pchnąłeś tagu w górę strumienia (może popchnąłeś commit do góry, oznaczono go później i się nie powtórzył?). Teraz nowy klon twojego upstream daje ci ten błąd (ponieważ nie ma żadnego tagu). W takim przypadku możesz wypróbować git push --tags z repozytorium, które ma odpowiedni znacznik (gdzie git describe robi to, czego się spodziewasz). Następnie wykonaj git pull w repozytorium, które nie ma tagu.

-2

Komenda ta pomogła mi: git sprowadzić -t

+8

Edytuj i uzyskaj więcej informacji. Tylko kod i odpowiedź "spróbuj tego" są [zniechęcają] (http://meta.stackexchange.com/questions/196187/is-try-this-bad-practice), ponieważ nie zawierają treści do przeszukiwania i nie zawierają wyjaśnij, dlaczego ktoś powinien "spróbować tego". –

7

miałem tego problemu w środowisku kompilacji CI gdzie narzędzie CI wykonywał płytkie klon repozytorium. To było frustrujące, bo w moim środowisku programistycznym, komenda

git describe --tags 

da mi wyjście jak

2.2.12-7-g8ec9d6c9 

natomiast w środowisku kompilacji Chciałbym dostać się błąd „Nie znaleziono nazwy śmiertelne”.Gdybym próbował pomocą --always tag

git describe --tags --always 

to bym po prostu uzyskać hash ostatni commit, ale nie najnowszy tag przed tym popełnić

8ec9d6c9 

Wykonywanie git pull w Środowisko budowy nie pomogłoby, ponieważ po repozytorium zostało sklonowane płytko, przyszłe ściągi nie zaktualizują tagów.

Roztwór aby początkowe klon repo w środowisku kompilacji nie płytka klonów (to komenda git clone nie stosować --depth, --shallow-since lub --shallow-exclude parametrów).

+0

Miałem dokładnie ten sam problem, dziękuję za twój wgląd! – Terenoth

Powiązane problemy