2011-10-04 3 views
7

나는 각 성공적인 커밋 후에 특정 디렉토리에 전개하기 위해 다음 post-commit 훅을 사용하려고합니다.GIT_WORK_TREE를 post-commit 훅에서 설정하지 않는 이유는 무엇입니까?

#!/bin/sh 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 

그러나 다음과 같은 오류가 발생합니다.

$ git commit -m 'An example commit.' 
fatal: Unable to create '/var/www/example/.git/index.lock': No such file or directory 
[master 0938e48] An example commit. 

... as GIT_WORK_TREE 설정이 무시되는 경우. 이 환경 변수를 설정하는 것이 왜 작동하지 않는 것처럼 보입니까? 나는 자식 버전 1.7.4.1을 사용하고있다.

답변

18

여기서 문제 (도 및 pre-commit, prepare-commit-msgcommit-msgt) post-commit 후크에 GIT_INDEX_FILE 환경 변수 .git/index로 설정되어 있다는 점이다. (이 은 githooks documentation에 설명되지 않은,하지만 난 다른 곳 about the settings of environment variables and the current directory in git hooks을 게시했습니다.)

GIT_INDEX_FILE 환경 변수의 효과로 git man 페이지의 환경 변수 섹션에서 를 설명 :

GIT_INDEX_FILE

This environment [variable] allows the specification of an alternate index file. If not specified, the default of $GIT_DIR/index is used.

... 그리고 어떤 이유로이 상황에서 GIT_INDEX_FILEGIT_WORK_TREE에 비해 입니다.

#!/bin/sh 
unset GIT_INDEX_FILE 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 
+1

이 또한 worktree 및 gitdir 옵션 자식에 작동하게하는 데 사용할 수 있습니다 :

당신이 당신의 후크의 모습, 그래서 당신은 단지, GIT_INDEX_FILE 설정을 해제 할 필요가 예상하는대로 후크 작업을 만들려면 은신처 및 다른 명령? 'git --worktree --gitdir '는 특정 명령에서만 작동하는 것처럼 보입니다. –

+0

@Adam Dymitruk : 나는'--work-tree = DIRECTORY'와'--git-dir = DIRECTORY'가 명령에 상관없이 hook 외부에서 안정적으로 작동한다는 것을 발견했다. (b) 최종 작업 트리 및 저장소 디렉토리가 계산되는 방법에 대한 혼란스러운 규칙을 기억하지 않아도되도록 절대 경로로 설정하십시오. –

+0

이것은 모두 후크 외부입니다. 일부는 작동하지 않습니다 .. 일부는 상대 경로로 인해 작동하지 않는지 확인해야 할 것입니다. 그러나 동일한 경로를 사용하고 있으며 변경하는 경우에는 이런 종류의 동작이 이상 할 것입니다. 명령. –

관련 문제