git 후크에서 현재 작업 디렉토리가 git 저장소 내에 있음을 보장합니까?


81

실험적으로 git 후크는 현재 디렉토리가 저장소의 루트로 설정된 상태에서 실행되는 것 같습니다. 그러나 git 문서에서는 이에 대한 보장을 볼 수 없습니다. git 저장소를 찾기 위해 현재 작업 디렉토리에 의존해야합니까, 아니면 후크와 관련된 git 저장소를 작업하는 더 좋은 방법이 있습니까?


4
얼마나 관련이 있는지 잘 모르겠습니다. Git 2.7.3 (-r1)을 사용하는 젠투 안정 상자에서 git hooks는 실행될 .git뿐만 아니라 git reset --hard실제로 디렉토리 내부에 작업 디렉토리 구조를 생성합니다 .git.
Pavel Šimerda

답변:


45

환경 변수에 설정된 값을 기반으로합니다 GIT_DIR. 후크가 실행되기 시작할 때 저장소의 루트로 설정됩니다. 많은 후크, 특히 다른 저장소에서 끌어 오는 후크는 필요에 따라이 환경 변수를 설정 해제 (및 재설정)합니다.


6
$ GIT_DIR에 후행 슬래시가 있습니까?
PuercoPop 2012

8
이것은 정답이 아닙니다. GIT_DIR이 항상 저장소의 루트로 설정되는 것은 아닙니다. 이 블로그를 참조하십시오 .
Ghopper21 2015

2
@ Ghopper21 그 기사도 완전히 정확하지 않습니다. 커밋 후 후크의 경우 현재 디렉터리가 작업 트리의 최상위 수준이라고 말합니다. 그러나 내 매우 간단한 커밋 후 스크립트는 작업 트리의 최상위 수준에서 다른 스크립트를 찾지 못했습니다. 예 :.git/hooks/post-commit: 1: .git/hooks/post-commit: post-commit_push_gitweb.sh: not found
Vince

67

현재 답변이 오래된 것 같습니다. 2.9.0부터 문서는 다음과 같이 설명합니다.

Git은 후크를 호출하기 전에 작업 디렉토리를 베어가 아닌 저장소의 작업 트리 루트 또는 베어 저장소의 $ GIT_DIR로 변경합니다.

https://git-scm.com/docs/githooks/2.9.0


11
좋은 대답입니다. 이후 개정판 (2.13.0)에서 설명이 이루어졌습니다. "예외는 $ GIT_DIR에서 항상 실행되는 푸시 (사전 수신, 업데이트, 수신 후, 업데이트 후, 체크 아웃으로 푸시) 중에 트리거되는 후크입니다."
Novice C

2
위 인용문의 소스 / 컨텍스트 : git-scm.com/docs/githooks#_description
jmcker

일반 언어로 : 저장소의 최상위 디렉토리입니다. ( "Bare"는 본질적으로 .git디렉토리 만으로 구성된 저장소를 의미하며 체크 아웃 된 파일은 없습니다.)
Ben Mares

4

환경 변수를 사용할 수 있습니다 $GIT_DIR. 디렉토리를 $GIT_DIR가리 킵니다 .git.


$GIT_DIR/..저장소 루트를 가리킬 가능성은 얼마나 됩니까?
데이비드 주님

절대 안전하지 않습니다. 사용하지 마십시오 $GIT_DIR/... 리포지토리가 베어 리포지토리이면 중단됩니다. 베어 저장소에는 작업 디렉토리가 없으므로 "저장소 루트"가 없습니다. 또한 .git이 대신 링크 일 때 중단됩니다.
holygeek

1
문채 있는. 정상적인 사용에서 repo 루트를 얻는 방법은 무엇입니까? 예를 들어 프로그램의 구성 파일로 저장소를 사용하는 사전 커밋 후크의 경우?
David Lord

3
모든 경우에 올바른 것은 아닙니다. 이 블로그를 참조하십시오 .
Ghopper21
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.