문제
저장소의 초기 커밋을 참조 해야하는 스크립트가 있습니다. GIT에는 특별한 참조가 있습니다 HEAD
, 그러나 해당 사항이 없습니다 TAIL
. 나는 아무것도 찾을 수 없다 git help rev-parse
그것은 나를 도와 줄 것 같습니다.
내가하고 싶은 일은 다음과 같습니다.
git show TAIL
다음은 다음과 같습니다.
git show `git log --reverse | if read a commit ; then echo $commit ; fi`
그것은 꽤 해킹되고 git 로그의 출력에 달려 있습니다.
지금 당장 나는 단지 초기 커밋을 태그하고 그것을 내 refspec으로 사용합니다. 그러나 일반적인 도구를 공개하고 싶습니다. 좋은 선택은 아닙니다.
해결책
스크립팅에 git-log를 사용하지 마십시오 : 지정된 사용자 정의 형식 ( "-format =u003Csth>" 옵션).
질문에 추가적인 문제가 있습니다. 존재할 수 있습니다. 하나 이상 그 리포지토리 (Git.git repository)의 'html', 'man'및 'todo'와 같은 연결이 끊어진 지점을 할인하더라도 이러한 테일 루트 커밋 (Parentles Commit). 이는 일반적으로 별도의 프로젝트에 하나씩 가입하거나 별도로 개발 된 하위 프로젝트의 하위 트리 병합을 사용한 결과입니다.
예를 들어 git 리포지토리는 6 개의 루트 커밋이 있습니다 : Git-Gui, Gitk (Subtree-Merged), GitWeb (더 이상 별도로 개발되지 않음), GIT 메일 도구 (프로젝트 이력 초기에 합병) 및 P4-Fast-Export (P4-Fast-Export)가 있습니다. 아마 우연히). 이는 'HTML 및'Man '지점의 뿌리, 사전 생성 된 문서를 포함하는 "편의"지점 및 TODO 목록 및 스크립트가있는'TODO '브랜치를 포함하지 않습니다.
GIT 1.7.4.2 또는 새로 사용하면 --max-parents
옵션:
$ git rev-list --max-parents=0 HEAD
그렇지 않으면 다음을 사용하여 현재 지점에서 액세스 할 수있는 모든 부모없는 (루트) 커밋 목록을 얻을 수 있습니다.
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
다른 팁
git rev-list HEAD | tail -n 1
보다 안정적인 옵션입니다.