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 . ********** 에서 업스트림 변경 사항 가져 오기
“고급 복제 동작”을 선택한 다음 태그 가져 오기를 클릭하여 가져 오기 태그를 활성화 할 수 있습니다.
답변
Travis CI의이 오류 메시지로 인해 여기에 온 경우 다음 설정을 사용하여 얕은 복제를 방지 할 수 있습니다.
git:
depth: false
테스트 git fetch --tags
했지만 작동하지 않았습니다.
답변
이 명령은 나를 도왔습니다. git fetch -t