Git-git pull을 가진 post-receive hook“유효한 git 디렉토리를 찾지 못했습니다”


17

매우 이상하지만 git 저장소를 설정하고 다음을 사용하여 수신 후 후크를 작성할 때 :

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

후크는 실제로 실행되지만 git pull을 올바르게 실행하지는 않습니다.

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

그래서 지금 나에게 묻고 있습니다. 후크를 사용하여 후크를 복제본으로 업데이트하는 방법은 무엇입니까?

이 경우 프로세스를 실행하는 사용자는 동일하며 사용자 폴더 내부의 모든 것이 동일하므로 실제로 이해하지 못합니다 ... 수동으로 들어가면

cd ~/websites/testing
git pull

문제없이 작동합니다 ...

그것에 대한 도움은 대단히 감사하겠습니다.

고마워

답변:


25

후크가 실행되는 동안 GIT_DIR(작업 트리가 명시 적으로 정의 된 경우) GIT_WORK_TREE설정됩니다. 즉, 변경 한 디렉토리의 두 번째 저장소에서 풀이 실행되지 않습니다.

시도하십시오 git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; 또는 git의 repo-local 환경을 다음과 같이 설정 해제하십시오.

unset $(git rev-parse --local-env-vars)

man 1 git의 이러한 환경 변수에 대한 자세한 정보 .


1
그 Tobu에게 정말 감사합니다. 실제로 작동합니다. 자세한 내용도 확인하겠습니다. 건배
zanona

6

내가 경험 한 한 가지는 post-update'--git-dir'후크 를 사용하면 훌륭하게 작동했지만 git은 여전히 ​​누락 된 작업 트리에 대해 불평하고 있습니다 ( '--work-tree'를 사용하더라도)

요컨대, 이것은 작동하지 않았다 :

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

반면 이것은 효과가 있었다 :

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


1

이 작동하지 않습니까?

cd /home/smb/websites/testing
env -i git pull

편집

그래도 낫다

cd /home/smb/websites/testing
unset GIT_DIR
git pull

0

~ 대신 전체 경로를 사용해 보셨습니까?

cd /home/smb/websites/testing
git pull

0

스크립트가 아마도로 호출되어 /bin/sh이해할 수 없습니다 ~. ~대신 전체 경로로 시도하십시오 .


0

후크가 GIT_DIR 등을 실행하는 경우 첫 번째 권장 답변이 옳습니다. 그러나 다른 리포지토리에서 스크립트를 사용하려면 GIT_DIR을 하드 코딩하여 해당 방법에 결함이 있습니다. 암시 하듯이, 다른 방법은 다음과 같이 env를 사용하여 변수를 제거하는 것입니다. env -i git reset --hard 분명히 어떤 명령을 실행하는지는 사용자에게 달려 있습니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.