이 경로가 때때로 git 저장소가 아닌 이유는 무엇입니까?

이 경로가 때때로 git 저장소가 아닌 이유는 무엇입니까?

문서를 업데이트하고 단위 테스트를 실행하는 등의 작업을 수행하는 git Hook( )이 있지만 post-receive때로는 제대로 작동하지 않습니다.

후크의 내용은 다음과 같습니다 post-receive.

#!/usr/bin/bash
~/bubblegum_ci > /tmp/bubblegum_ci_log 2>&1 &

이것은 알아내는 것이 어렵지 않습니다. 백그라운드에서 스크립트를 시작하고 stdout 및 stderr을 로그 파일로 파이프하기만 하면 됩니다.

다음은 bubblegum_ci의 내용입니다.

#!/usr/bin/bash
id
cd /home/git/bubblegum
pwd
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull -v .
make genhtml doxygen

이것도 쉽습니다. 다른 저장소로 이동하여 변경 사항을 가져온 다음 호출하여 make실제 작업을 수행하면 됩니다. 때로는 잘 작동합니다. 때때로 스크립트는 다음과 같은 출력을 제공합니다.

uid=1001(git) gid=1001(git) groups=1001(git),1002(www)
/home/git/bubblegum
fatal: not a git repository: '.'
make genhtml doxygen
<the output from make showing that the commits I just pushed have not been pulled>

첫 번째 줄 /home/git/bubblegum은 분명히 출력 pwd이지만 git은 git 저장소가 아니어서 가져올 수 없습니다. 나는 이것이 때로는 작동하고 때로는 작동하지 않는다는 사실 때문에 혼란스러워합니다. 여기 누구든지 이 문제를 설명할 수 있나요? 내가 모르는 경쟁 조건이 있나요? 그렇지 않으면 이런 종류의 일을 처리하는 더 좋은 방법이 있는지 알고 싶습니다.

/home/git/bubblegum/.git의 권한은 다음과 같습니다.

git@fancy-server:~$ ls /home/git/bubblegum -al | grep \\.git
drwxr-xr-x  8 git git   4096 Sep  2 09:58 .git

출력은 다음과 같습니다 ls -l /home/git/bubblegum/.git/.

$ ls -l .git
total 52
-rw-r--r--   1 git git   84 Sep  2 09:58 FETCH_HEAD
-rw-r--r--   1 git git   23 Aug 31 15:42 HEAD
-rw-r--r--   1 git git   41 Sep  2 09:58 ORIG_HEAD
drwxr-xr-x   2 git git 4096 Aug 31 15:42 branches
-rw-r--r--   1 git git  251 Aug 31 15:42 config
-rw-r--r--   1 git git   73 Aug 31 15:42 description
drwxr-xr-x   2 git git 4096 Aug 31 15:42 hooks
-rw-r--r--   1 git git 1875 Sep  2 09:52 index
drwxr-xr-x   2 git git 4096 Aug 31 15:42 info
drwxr-xr-x   3 git git 4096 Aug 31 15:42 logs
drwxr-xr-x 151 git git 4096 Sep  2 09:52 objects
-rw-r--r--   1 git git  114 Aug 31 15:42 packed-refs
drwxr-xr-x   5 git git 4096 Aug 31 15:42 refs

si의 출력은 다음과 같습니다 mount | grep home.

/dev/sda6 on /home type ext4 (rw,relatime) 

답변1

문제는 환경 변수와 관련이 있습니다. 여기서 단서는 git 후크가 실행되는 환경이 아니라 명령줄에서 작동한다는 것입니다.

env그래서 스크립트에 명령을 넣고 알아차렸습니다 GIT_DIR=".". 이것은 신비한 오류 메시지를 설명합니다 fatal: not a git repository: '.'. 정말,GIT_DIR 설정은 한 가지이며 환경 변수를 재정의하는 명령줄 옵션이 있습니다.

댓글에서 명령 끝에 잘못된 마침표를 지적한 Raphael Ahrens에게도 감사드립니다 git pull .. 이제 Pull을 수행하는 명령이 이렇게 생겼고 git --git-dir="/home/git/bubblegum/.git/" pull -v잘 되고 있는 것 같습니다.

관련 정보