git description schlägt fehl mit "fatal: Keine Namen gefunden, kann nichts beschreiben."

79

Ich verwende Git 1.7.1 unter Ubuntu 10.10 amd64 und versuche, den Hash meines Repository-HEAD zu extrahieren, um ihn in einer automatisierten Versionsinformation zu verwenden, die ich in mein Projekt kompiliere.

In der Vergangenheit funktionierte dies immer mit

git describe --tags

Allerdings wirft Git jetzt

fatal: No names found, cannot describe anything.

bei mir. Hat jemand eine Ahnung, was das bedeutet?

Google zeigte nur wenige Treffer und keine Lösung.

Philipp
quelle
Wollen Sie eigentlich nur den Hash oder sind die von git zusammengestellten Informationen für Sie nützlich? Das neueste Tag und die Anzahl der Zwischen-Commits sind für den Menschen viel besser lesbar als ein SHA1. @nes: Vielleicht möchten Sie Ihre Antwort wiederherstellen, da es genau das sein könnte, was das OP benötigt - es ist schwer zu sagen.
Cascabel
Persönliche Erinnerung: Überprüfen Sie, dass der Remote - Tags tatsächlich hat zum Beispiel unter Verwendung git ls-remote --tags. In meinem Fall wurde das Repo kürzlich auf einen neuen Server migriert und die Tags wurden noch nicht übertragen!
Gabriel Devillers

Antworten:

71

Wenn Sie die ID von Ihnen wollen, HEADdann brauchen describeSie nicht , sollten Sie nur verwenden rev-parse.

git rev-parse HEAD

Wenn Sie einen abgekürzten Hash möchten, können Sie diesen verwenden --short.

git rev-parse --short HEAD

Wenn Sie möchten, dass eine "Beschreibung" auf einen abgekürzten Hash zurückgreift, wenn keine geeigneten Tags gefunden werden, können Sie diese verwenden --always.

git describe --always
CB Bailey
quelle
Ja, das gibt den Hash zurück, aber was ich wirklich will, ist der abgekürzte Hash, der normalerweise von git-description zurückgegeben wird und ungefähr 8 Zeichen hat
Philipp
1
@Philipp: Gibt git describenormalerweise eine auf einem Tag-Objekt basierende Zeichenfolge zurück, die aus dem Tag-Namen, einer Anzahl von Commits und einem auf dem Hash basierenden Suffix besteht. Normalerweise wird kein abgekürzter Hash zurückgegeben, daher bin ich mir nicht ganz sicher, wonach Sie fragen.
CB Bailey
37

Es hört sich so an, als würden Sie git-describedas neueste Tag und die Anzahl der Commits seit diesem Tag einschließen. Die fatal: No names foundNachricht bedeutet jedoch, dass Sie keine Tags in Ihrem Repository haben. Sie müssen mindestens ein Tag im Festschreibungsverlauf haben git describe, um das neueste Tag zu erhalten.

Nur raten, aber vielleicht haben Sie ein Commit an einer anderen Stelle markiert, aber das Tag nie stromaufwärts verschoben (vielleicht haben Sie das Commit stromaufwärts verschoben, später markiert und nicht neu gestartet?). Jetzt gibt Ihnen ein neuer Klon Ihres Upstreams diesen Fehler (da er kein Tag hat). Wenn dies der Fall ist, können Sie es git push --tagsaus dem Repository versuchen , das das gewünschte Tag enthält (wo git describewird das getan, was Sie erwarten). Führen Sie dann git pulldas Repository aus, das das Tag nicht enthält.

Esser
quelle
34

Ich hatte dieses Problem in einer CI-Build-Umgebung, in der das CI-Tool einen flachen Klon des Repositorys ausführte. Das war frustrierend, weil in meiner Entwicklungsumgebung der Befehl

git describe --tags

würde mir gerne eine Ausgabe geben

2.2.12-7-g8ec9d6c9

In der Build-Umgebung würde der Fehler "Schwerwiegend keine Namen gefunden" angezeigt. Wenn ich versucht hätte, das Tag --always zu verwenden

git describe --tags --always

dann würde ich einfach den Hash des letzten Commits erhalten, aber nicht das neueste Tag vor diesem Commit

8ec9d6c9

Das Durchführen einer git pullin der Build-Umgebung würde nicht helfen, da zukünftige Pulls die Tags nicht aktualisieren, sobald das Repo flach geklont wurde.

Die Lösung war , um sicherzustellen , dass der ursprüngliche Klon des repo im Bauumgebung war kein flacher Klon (dh der git cloneBefehl wurde nicht verwendet --depth, --shallow-sinceoder --shallow-excludeParameter).

Mike Pollitt
quelle
Ich hatte genau das gleiche Problem, danke für Ihren Einblick!
Terenoth
4
Das Hinzufügen git fetch --depth=500hat bei mir mit Travis-CI funktioniert.
Matt Wilkie
Das ist die Antwort, die ich auch wollte!
Serkef
Ja - das Hinzufügen, um .travis.ymles für mich zu git: depth: false
beheben
1
Sie können auch einfach git fetch --tagsim flachen Klon die fehlenden Tags abrufen
Luke H
14

Dies geschieht, wenn Sie keine Tags in Ihrem Repository haben. Wenn das Repository dies tut Tags haben, dann sind Sie in einem flachen Klon (dies ist die Standardeinstellung in CI - Systeme wie TravisCI oder GitHub Aktionen ist).

Führen Sie Folgendes aus, um den Verlauf (einschließlich Tags) aus einem flachen Klon abzurufen

git fetch --prune --unshallow

Zum Beispiel bei GitHub-Aktionen:

- uses: actions/checkout@v2
- run: git fetch --prune --unshallow

Danach git describesollte wieder funktionieren.

Danilo Bargen
quelle
1
Für GitHub-Aktionen --tagswurde in meinem Fall benötigt - also git fetch --prune --unshallow --tags. Siehe diese Ausgabe
u-phoria
1
Während dies funktioniert und das Problem für flache Repos in Github-Workflows löst, wird nicht - unshallowing tatsächlich den gesamten Verlauf des Repositorys abrufen? Ein großes Repo mit viel Geschichte wird Probleme verursachen, indem der CI-Pipeline ein Engpass hinzugefügt wird.
Norman Pellet
1
Ja, dies wird die gesamte Geschichte abrufen. Da ein Tag ein Zeiger auf eine Revision ist, muss diese Revision vorhanden sein, damit das Tag ordnungsgemäß funktioniert.
Danilo Bargen
5

Ich hatte das ähnliche Problem bei der Arbeit an einem CI-Job. Das Problem war, dass der Git-Klon oder der verwendete Checkout-SCM beim Klonen des Repos keine Tags abgerufen hat.

Abrufen ohne Tags Abrufen von Upstream-Änderungen von https: // github . **********

Sie können Abruf-Tags aktivieren, indem Sie "Erweitertes Klonverhalten" auswählen und dann auf Abruf-Tags klicken.

Screenshot_enabling_git_fetch

dheeraj tripathi
quelle
1

Wenn Sie aufgrund dieser Fehlermeldung in Travis CI hierher gekommen sind, können Sie die folgende Einstellung verwenden, um flache Klone zu vermeiden:

git:
  depth: false

Ich habe getestet, git fetch --tagsaber das hat nicht funktioniert.

Stefan Profanter
quelle
0

Dieser Befehl hat mir geholfen: git fetch -t

Vetalok
quelle
11
Bitte bearbeiten Sie mit weiteren Informationen. Nur-Code- und "Versuch dies" -Antworten werden nicht empfohlen , da sie keinen durchsuchbaren Inhalt enthalten und nicht erklären, warum jemand "dies versuchen" sollte.
Rick Smith
So knapp es auch sein mag, dies ist die einzige Antwort, die erwähnt wird fetch.
Bjoern Dahlgren
Das Problem von OP war, dass sein lokales Repository keine Tags hatte. Wenn die Fernbedienung hat, aber die lokale nicht, können Sie die Tags mit git fetch -t oder git fetch --tags
Wolfgang
Dieser Befehl hat auch mein Problem wirklich gelöst und keine der anderen Antworten.
Marcos Fernandez Ramos