실험적으로 git 후크는 현재 디렉토리가 저장소의 루트로 설정된 상태에서 실행되는 것 같습니다. 그러나 git 문서에서는 이에 대한 보장을 볼 수 없습니다. git 저장소를 찾기 위해 현재 작업 디렉토리에 의존해야합니까, 아니면 후크와 관련된 git 저장소를 작업하는 더 좋은 방법이 있습니까?
답변:
환경 변수에 설정된 값을 기반으로합니다 GIT_DIR. 후크가 실행되기 시작할 때 저장소의 루트로 설정됩니다. 많은 후크, 특히 다른 저장소에서 끌어 오는 후크는 필요에 따라이 환경 변수를 설정 해제 (및 재설정)합니다.
.git/hooks/post-commit: 1: .git/hooks/post-commit: post-commit_push_gitweb.sh: not found
현재 답변이 오래된 것 같습니다. 2.9.0부터 문서는 다음과 같이 설명합니다.
Git은 후크를 호출하기 전에 작업 디렉토리를 베어가 아닌 저장소의 작업 트리 루트 또는 베어 저장소의 $ GIT_DIR로 변경합니다.
.git디렉토리 만으로 구성된 저장소를 의미하며 체크 아웃 된 파일은 없습니다.)
환경 변수를 사용할 수 있습니다 $GIT_DIR. 디렉토리를 $GIT_DIR가리 킵니다 .git.
$GIT_DIR/..저장소 루트를 가리킬 가능성은 얼마나 됩니까?
$GIT_DIR/... 리포지토리가 베어 리포지토리이면 중단됩니다. 베어 저장소에는 작업 디렉토리가 없으므로 "저장소 루트"가 없습니다. 또한 .git이 대신 링크 일 때 중단됩니다.
.git뿐만 아니라git reset --hard실제로 디렉토리 내부에 작업 디렉토리 구조를 생성합니다.git.