[git] git describe가 “치명적 : 이름을 찾을 수 없음, 아무것도 설명 할 수 없음”과 함께 실패합니다.

Ubuntu 10.10 amd64에서 git 1.7.1을 사용하고 있으며 내 프로젝트로 컴파일하는 자동화 된 버전 정보에서 사용하기 위해 내 저장소 HEAD의 해시를 추출하려고합니다.

과거에는 항상

git describe --tags

그러나 git은 이제 던지고 있습니다.

fatal: No names found, cannot describe anything.

나 한테. 그게 무슨 뜻인지 아는 사람 있나요?

Google은 조회수가 거의없고 해결책이 없습니다.



답변

당신이 당신의 ID를 원한다면 HEAD당신은 필요하지 않습니다 describe, 당신은 사용해야 rev-parse합니다.

git rev-parse HEAD

축약 된 해시를 원하면 --short.

git rev-parse --short HEAD

적절한 태그를 찾을 수없는 경우 “describe”가 축약 된 해시로 대체되도록하려면을 사용할 수 있습니다 --always.

git describe --always


답변

git-describe가장 최근의 태그와 해당 태그 이후의 커밋 수를 포함 할 것으로 예상 하는 것 같습니다. 그러나 fatal: No names found메시지는 저장소에 태그가 없음을 의미 합니다. git describe최신 태그를 알려주 려면 커밋 기록에 적어도 하나의 태그가 있어야합니다 .

추측 만했지만 다른 곳에서 커밋에 태그를 지정했지만 태그를 업스트림으로 푸시하지 않았을 수 있습니다 (커밋을 업스트림으로 푸시하고 나중에 태그를 지정하고 리 푸시하지 않았습니까?). 이제 업스트림의 새 복제본이이 오류를 제공합니다 (태그가 없기 때문에). 이 경우 git push --tags원하는 태그가있는 저장소에서 시도 할 수 git describe있습니다 (예상 되는 작업을 수행하는 위치 ). 그런 다음 git pull태그가없는 저장소에서 수행하십시오.


답변

CI 도구가 저장소의 얕은 복제를 수행하는 CI 빌드 환경에서이 문제가 발생했습니다. 내 개발 환경에서 명령이

git describe --tags

나에게 다음과 같은 출력을 줄 것이다.

2.2.12-7-g8ec9d6c9

빌드 환경에서는 “치명적인 이름을 찾을 수 없음”오류가 발생합니다. –always 태그를 사용해 본 경우

git describe --tags --always

그런 다음 단순히 최신 커밋의 해시를 가져 오지만 해당 커밋 이전의 가장 최근 태그는 가져 오지 않습니다.

8ec9d6c9

수행 git pull빌드 환경에서를 것은 도움이되지 않을 것입니다. 리포지토리가 얕게 복제 된 후에는 향후 pull이 태그를 업데이트하지 않기 때문입니다.

해결책은 빌드 환경에서 저장소의 초기 복제본이 얕은 복제본이 아닌지 확인하는 것이 었습니다 (예 : git clone명령이 --depth, --shallow-since또는 --shallow-exclude매개 변수 와 함께 사용되지 않음 ).


답변

이는 저장소에 태그가없는 경우 발생합니다. 저장소 태그가, 당신은 (이 TravisCI 또는 GitHub의 작업과 같은 CI 시스템의 기본입니다) 얕은 클론에있어.

얕은 클론 내에서 기록 (태그 포함)을 가져 오려면 다음을 실행합니다.

git fetch --prune --unshallow

예를 들어 GitHub 작업의 경우 :

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

나중에 git describe다시 작동합니다.


답변

CI 작업에서 작업하는 동안 비슷한 문제가 있었는데 문제는 git clone 또는 checkout scm가 저장소를 복제하는 동안 태그를 가져 오지 못했습니다.

태그없이 가져 오기 https : // github . ********** 에서 업스트림 변경 사항 가져 오기

“고급 복제 동작”을 선택한 다음 태그 가져 오기를 클릭하여 가져 오기 태그를 활성화 할 수 있습니다.

Screenshot_enabling_git_fetch


답변

Travis CI의이 오류 메시지로 인해 여기에 온 경우 다음 설정을 사용하여 얕은 복제를 방지 할 수 있습니다.

git:
  depth: false

테스트 git fetch --tags했지만 작동하지 않았습니다.


답변

이 명령은 나를 도왔습니다. git fetch -t