git describe échoue avec “fatal: aucun nom trouvé, ne peut rien décrire”

J’utilise git 1.7.1 sur Ubuntu 10.10 amd64, et j’essaie d’extraire le hash de mon référentiel HEAD pour l’utiliser dans une version automatisée des informations que je comstack dans mon projet.

Dans le passé, cela a toujours fonctionné en utilisant

git describe --tags 

cependant, git lance maintenant

 fatal: No names found, cannot describe anything. 

à moi. Quelqu’un at-il une idée de ce que cela signifie?

Google n’a montré que quelques hits et aucune solution.

Si vous voulez l’identifiant de votre HEAD alors vous n’avez pas besoin de describe , vous devriez simplement utiliser rev-parse .

 git rev-parse HEAD 

Si vous voulez un hash abrégé, vous pouvez utiliser --short .

 git rev-parse --short HEAD 

Si vous voulez qu’un “describe” se rabat sur un hash abrégé s’il ne trouve pas de tags appropriés, vous pouvez utiliser --always .

 git describe --always 

Il semble que vous vous attendiez à ce que git-describe contienne le tag et le nombre de commits les plus récents depuis cette balise. Toutefois, le message fatal: No names found signifie que vous n’avez pas de balises dans votre référentiel. Vous devez avoir au moins une balise dans l’historique des validations pour que git describe la balise la plus récente.

Juste deviner, mais vous avez peut-être tagué un commit ailleurs, mais vous n’avez jamais poussé le tag en amont (peut-être avez-vous poussé le commit en amont, l’avez taggé plus tard et n’avez pas repoussé?). Maintenant, un nouveau clone de votre amont vous donne cette erreur (car il n’y a pas de tag). Si tel est le cas, vous pouvez essayer git push --tags partir du référentiel git push --tags le tag que vous souhaitez (où git describe ce que vous attendez). Puis faites git pull sur le repository qui n’a pas la balise.

J’ai eu ce problème dans un environnement de construction CI où l’outil CI effectuait un clone superficiel du référentiel. C’était frustrant, car dans mon environnement de développement, la commande

 git describe --tags 

me donnerait comme sortie

 2.2.12-7-g8ec9d6c9 

alors que dans l’environnement de construction j’obtiendrais l’erreur “fatal no names found”. Si j’ai essayé d’utiliser la balise –always

 git describe --tags --always 

alors je voudrais simplement obtenir le hachage de la dernière validation, mais pas la balise la plus récente avant cette validation

 8ec9d6c9 

Effectuer une git pull dans l’environnement de construction ne serait pas utile, car une fois que le référentiel a été cloné peu profond, les futurs tirages ne mettront pas à jour les balises.

La solution consistait à s’assurer que le clone initial du repository dans l’environnement de construction n’était pas un clone superficiel (la commande git clone n’était pas utilisée avec les --depth , --shallow-since ou --shallow-exclude ).

Cette commande m’a aidé: git fetch -t