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.
git ls-remote --tags
. In meinem Fall wurde das Repo kürzlich auf einen neuen Server migriert und die Tags wurden noch nicht übertragen!Antworten:
Wenn Sie die ID von Ihnen wollen,
HEAD
dann brauchendescribe
Sie nicht , sollten Sie nur verwendenrev-parse
.Wenn Sie einen abgekürzten Hash möchten, können Sie diesen verwenden
--short
.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
.quelle
git describe
normalerweise 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.Es hört sich so an, als würden Sie
git-describe
das neueste Tag und die Anzahl der Commits seit diesem Tag einschließen. Diefatal: No names found
Nachricht bedeutet jedoch, dass Sie keine Tags in Ihrem Repository haben. Sie müssen mindestens ein Tag im Festschreibungsverlauf habengit 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 --tags
aus dem Repository versuchen , das das gewünschte Tag enthält (wogit describe
wird das getan, was Sie erwarten). Führen Sie danngit pull
das Repository aus, das das Tag nicht enthält.quelle
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
würde mir gerne eine Ausgabe geben
In der Build-Umgebung würde der Fehler "Schwerwiegend keine Namen gefunden" angezeigt. Wenn ich versucht hätte, das Tag --always zu verwenden
dann würde ich einfach den Hash des letzten Commits erhalten, aber nicht das neueste Tag vor diesem Commit
Das Durchführen einer
git pull
in 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 clone
Befehl wurde nicht verwendet--depth
,--shallow-since
oder--shallow-exclude
Parameter).quelle
git fetch --depth=500
hat bei mir mit Travis-CI funktioniert..travis.yml
es für mich zugit: depth: false
git fetch --tags
im flachen Klon die fehlenden Tags abrufenDies 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
Zum Beispiel bei GitHub-Aktionen:
Danach
git describe
sollte wieder funktionieren.quelle
--tags
wurde in meinem Fall benötigt - alsogit fetch --prune --unshallow --tags
. Siehe diese AusgabeIch 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.
quelle
Wenn Sie aufgrund dieser Fehlermeldung in Travis CI hierher gekommen sind, können Sie die folgende Einstellung verwenden, um flache Klone zu vermeiden:
Ich habe getestet,
git fetch --tags
aber das hat nicht funktioniert.quelle
Dieser Befehl hat mir geholfen: git fetch -t
quelle
fetch
.