Git описать не удалось с "фатальным: имена не найдены, ничего не могут описать".

Я использую git 1.7.1 на Ubuntu 10.10 amd64, и я пытаюсь извлечь хэш своего хранилища HEAD, чтобы использовать его в информации о автоматизированной версии, которую я компилирую в свой проект.

В прошлом это всегда срабатывало при использовании

git describe --tags

однако git теперь бросает

fatal: No names found, cannot describe anything.

у меня. Кто-нибудь знает, что это значит?

Google показал только несколько ударов и не нашел решения.

Ответ 1

Если вам нужен идентификатор вашего HEAD, тогда вам не нужен describe, вам просто нужно использовать rev-parse.

git rev-parse HEAD

Если вам нужен сокращенный хеш, вы можете использовать --short.

git rev-parse --short HEAD

Если вы хотите, чтобы "description" возвращалось к сокращенному хешу, если не удается найти подходящие теги, вы можете использовать --always.

git describe --always

Ответ 2

Похоже, вы ожидаете, что git-describe будет включать в себя самый последний тег и количество коммитов с этого тега. Однако сообщение fatal: No names found означает, что в вашем репозитории нет тегов. Вам нужно иметь хотя бы один тег в истории фиксации, чтобы git describe высказал вам последний тег.

Просто гадать, но, возможно, вы отметили коммит где-то еще, но никогда не подтолкнули тег вверх по течению (возможно, вы нажали на команду вверх по течению, пометили ее позже и не отменили?). Теперь новый клон вашего восходящего потока дает вам эту ошибку (поскольку в ней нет никакого тега). В этом случае вы можете попробовать git push --tags из репозитория, у которого есть тег, который вы хотите (где git describe делает то, что вы ожидаете). Затем сделайте git pull в репозитории, у которого нет тега.

Ответ 3

У меня была эта проблема в среде сборки CI, где инструмент CI выполнял мелкий клон репозитория. Это расстраивало, потому что в моей среде разработки команда

git describe --tags

дал бы мне результат вроде

2.2.12-7-g8ec9d6c9

тогда как в среде сборки я бы получил ошибку "Fatal no names found". Если я попытался использовать тег --always

git describe --tags --always

то я бы просто получил хэш последней фиксации, но не самый последний тег до этого commit

8ec9d6c9

Выполнение git pull в среде сборки не помогло бы, потому что, как только репо было клонировано мелко, будущие тяги не будут обновлять теги.

Решение заключалось в том, чтобы исходный клон репо в среде сборки не был мелким клоном (т.е. команда git clone не использовалась с параметрами --depth, --shallow-since или --shallow-exclude).

Ответ 4

У меня была похожая проблема во время работы над заданием CI, проблема заключалась в том, что git clone или scm не использовали теги при клонировании репозитория.

Извлечение без тегов Извлечение исходящих изменений из https://github. **********

Вы можете включить выборку тегов, выбрав "Расширенное поведение клонирования", а затем нажав на выборку тегов.

Screenshot_enabling_git_fetch

Ответ 5

Если вы пришли сюда из-за этого сообщения об ошибке в Travis CI, вы можете использовать следующие настройки, чтобы избежать мелких клонов:

git:
  depth: false

Я тестировал git fetch --tags, но это не сработало.

Ответ 6

Эта команда помогла мне: git fetch -t