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