git 설명이 실패하고 "failure:이름을 찾을 수 없고, 어떤 것도 설명할 수 없습니다."
Ubuntu 10.10 및 64에서 git 1.7.1을 사용하고 있으며, 프로젝트에 컴파일하는 자동 버전 정보에 사용하기 위해 저장소 HEAD의 해시를 추출하려고 합니다.
과거에는 항상 다음을 사용하여 작동했습니다.
git describe --tags
하지만, git은 지금 던지고 있습니다.
fatal: No names found, cannot describe anything.
그게 무슨 뜻인지 아는 사람?
구글은 몇 번의 검색 결과만 보여줬을 뿐 해결책은 없었습니다.
CI 툴이 저장소의 얕은 클론을 수행하는 CI 빌드 환경에서 이러한 문제가 발생했습니다.개발 환경에서 명령어를 사용되었기 때문에 이 작업은 좌절되었습니다.
git describe --tags
다음과 같은 출력을 제공합니다.
2.2.12-7-g8ec9d6c9
빌드 환경에서는 "fatal no names found" 오류가 발생합니다.--always 태그를 사용하려고 하면
git describe --tags --always
그러면 나는 단순히 최근 커밋의 해시를 얻을 것이지만, 그 커밋 이전의 가장 최근 태그는 아닐 것입니다.
8ec9d6c9
git pull
일단 레포가 얕게 복제되면 이후의 풀은 태그를 업데이트하지 않기 때문에 빌드 환경에서는 도움이 되지 않습니다.
클론 솔은빌즉환레얕클클은론론이초기서의포에경,git clone
가 명이사않니다와 함께 .--depth
,--shallow-since
또는--shallow-exclude
매개 변수)를 선택합니다.
당신이 당신의 아이디를 원한다면,HEAD
그럼 당신은 필요 없습니다.describe
당신은 그냥 사용해야 합니다.rev-parse
.
git rev-parse HEAD
약어해사면려하용을 할 수 .--short
.
git rev-parse --short HEAD
수 때 "description"을 사용하면 .--always
.
git describe --always
당신이 기대하는 것처럼 들리네요.git-describe
해당 태그 이후 가장 최근의 태그와 커밋 수를 포함합니다. 하만지그, 그.fatal: No names found
메시지는 리포지토리에 태그가 없음을 의미합니다.커밋 기록에 태그가 하나 이상 있어야 합니다.git describe
최신 태그를 알려드리겠습니다.
추측이지만, 아마도 당신은 다른 곳에서 커밋에 태그를 달았지만 태그를 업스트림으로 밀어본 적이 없을 것입니다(커밋을 업스트림으로 밀어넣고 나중에 태그를 달았고 다시 밀어넣지 않았을 수도 있습니다).이제 업스트림의 새 복제본이 이 오류를 표시합니다(태그가 없기 때문에).만약 그렇다면, 당신은 시도해 볼 수 있습니다.git push --tags
에서(여기서 원는태있위리는리토포지그가치하위(리(토))git describe
기대하는 바를 실천하고 있습니다.) 그럼하라.git pull
태그가 없는 리포지토리에 있습니다.
리포지토리에 태그가 없는 경우 이 문제가 발생합니다.리포지토리에 태그가 있으면 얕은 복제본에 있는 것입니다(TravisCI 또는 GitHub Actions와 같은 CI 시스템에서는 기본값).
얕은 복제본 내에서 기록(태그 포함)을 가져오려면 다음을 실행합니다.
git fetch --prune --unshallow
예를 들어 GitHub 작업의 경우:
- uses: actions/checkout@v2
- run: git fetch --prune --unshallow
후에, 후에그,▁after그.git describe
다시 작동해야 합니다.
GitHub Actions 및 Actions/Checkout을 사용하는 경우 다음을 설정해야 합니다.fetch-depth
0
:
# ...
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
CI 작업을 할 때도 비슷한 문제가 있었는데, git clone 또는 checkout scms가 repo를 복제할 때 태그를 가져오지 않는 문제가 있었습니다.
태그 없이 가져오기https://github.********에서 업스트림 변경 내용 가져오기
고급 복제 동작을 선택한 다음 가져오기 태그를 클릭하여 가져오기 태그를 사용하도록 설정할 수 있습니다.
이 명령은 다음과 같은 도움이 되었습니다.git fetch -t
Git 저장소에서 최신 태그를 가져오므로 태그를 설명할 수 있습니다.
Travis CI의 이 오류 메시지 때문에 여기에 온 경우 다음 설정을 사용하여 얕은 클론을 방지할 수 있습니다.
git:
depth: false
테스트했습니다.git fetch --tags
하지만 이것은 효과가 없었다.
Github Actions 및 checkout@v3를 사용하는 경우
기본적으로 액션은 마지막 커밋만 가져오기 때문에 이 문제가 발생합니다. 다른 게시물에서 언급했듯이 이 커밋이 태그되지 않으면git describe --tags
충돌합니다(태그를 찾을 수 없을 때 충돌합니다).
Github 직원이 이 문제를 해결하기 위해 다소 무시하는 공개 PR이 있습니다.
그동안, 당신은 몇 가지 선택권이 있습니다.
- 모든 커밋 가져오기(응답 참조)
- 앞서 언급한 답변을 해킹하고 다른 답변/메시지에서 영감을 얻습니다. (X = 50)와 같은 것으로 X 커밋(머리와 마지막 태그가 지정된 커밋 사이에 X 이상의 태그가 지정되지 않은 커밋이 있는 경우)을 가져옵니다.
# ...
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 50
이 문제는 분기된 분기를 복제한 후 발생하며 업스트림에서 기본 재배치한 후 사라집니다.
기본 재배치 전:
# git describe --tags
fatal: No names found, cannot describe anything.
기본 재배치 후:
# git describe --tags
v0.1.xxxx
기본 재배치 명령:
git remote add upstream xxxxx
git checkout main
git remote prune origin
git fetch -p upstream
git rebase upstream/main
14 Gitlab 14.7을 했습니다.git depth
이 오류로 인해 CI 파이프라인이 실패한 원인은 50에서 20입니다.로그에 될 수 있습니다.
INFO:git.cmd:git describe --tags -> 128; stdout: '<OUTPUT_STREAM>'; stderr: 'fatal: No names found, cannot describe anything.'
이 문제는 다음을 통해 해결할 수 있습니다.
을 포함하여
.gitlab-ci.yml
파일또는
Gitlab UI에서 Settings -> CI/CD -> General Pipeline을 통해 'Git shallow clone' 값을 변경합니다.얕은 복제를 사용하지 않으려면 0으로 변경합니다.
자세한 내용은 gitlab 문서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/4916492/git-describe-fails-with-fatal-no-names-found-cannot-describe-anything
'programing' 카테고리의 다른 글
문자열을 줄로 분할하는 가장 좋은 방법 (0) | 2023.08.13 |
---|---|
standard_init_linux.go:190: exec 사용자 프로세스로 인해 "해당 파일 또는 디렉터리가 없습니다" - 도커 (0) | 2023.08.13 |
Android의 전체 화면 대화 상자 조각 (0) | 2023.08.13 |
동일한 로그 파일에 추가되는 표준 및 오류 출력의 리디렉션 (0) | 2023.08.13 |
파워셸에 디렉터리를 재귀적으로 나열 (0) | 2023.08.13 |