업데이트 후 후크를 사용하여 다른 저장소에서 'git pull'을 실행할 때 "치명적 : git 저장소가 아님 : '.'"표시


90

나는 git을 처음 사용하므로 여기에서 용어를 오용하면 사과하고 수정하십시오.하지만 최선을 다할 것입니다.

웹 서버에 베어 git 저장소 (허브)와 개발 사이트 작업 복사본 (프라임)을 설정하려고합니다. 나는 이 기사 이후에 그것을 패턴 화하려고 시도했다 . 허브 저장소가 푸시 될 때마다 개발 작업 사본이 업데이트되기를 원합니다. 나는 이것에 대한 적절한 후크가라는 인상을 받고 있습니다 post-update.

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

최신 정보

로컬 리포지토리에서 베어 허브로 변경 사항을 푸시하면 업데이트 후 스크립트에서 다음 출력이 표시됩니다.

remote: sites
remote: fatal: Not a git repository: '.'

그러나 사용자 '사이트'로 서버에 SSH를 사용하고이 스크립트를 수동으로 실행하면 훌륭하게 작동합니다.이 후크 또는 스크립트에 어떤 문제가 발생할 수 있는지에 대한 아이디어가 있습니까?

답변:


179

다음은 궁극적으로 작동 한 스크립트입니다. 원격으로 작동하지 못했던 원래 누락 된 부분은unset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

18
확인하고 설정을 해제 GIT_DIR하면 문제가 해결됩니다.
— jmtd

16
이유를 이해하려는 사람들을 위해 : git이 GIT_DIR대신 변수 를 사용하기 때문 입니다 PWD. cd-ing PWD은 GIT_DIR. 첫 번째를 사용할 수없는 경우 git에서 GIT_DIRto to 로 대체가 있어야합니다 PWD.
— zupa 2013-06-21

질문은 왜 git이 후크 스크립트에 대해 이것을 수행해야 하는지를 확인해야한다는 것입니다 (스크립트도 'git whatever'이 여전히 작동 할 다른 곳에 'cd'가 있도록 GIT_DIR을 설정합니다)? 나는 개인적으로 git이 이런 종류의 마술을하지 않는 것을 선택합니다.
— 스티븐 Haryanto

2
그 이유는 Git이 모든 핵심 git 명령에 일부 환경 변수 를 적용 하기 때문 입니다.
— Casey

이후에 병합 충돌이 발생하면 어떻게됩니까 git pull?
— lolololol 올


0

설정되지 않은 GIT_DIR에도 불구하고 작동합니다.

GIT_DIR을 다른 곳에서 잘못 설정하면 문제가 발생합니다.

대신 추가 할 수 있습니다. GIT_DIR = .git / 작동합니다.


0

제 경우에는 작업 트리를 지정했으며 이것은 pull(또는 더 정확하게 fetch) 와 같은 일부 명령에서 중단됩니다 .

git 구성에있는 경우 작업 트리를 설정 해제하려면 다음을 사용하십시오.

git config --unset core.worktree

(작업 트리를 설정하는 다른 방법이 있습니다)

주목할 점은

처음에 사용자 정의 작업 트리를 사용하여 자신이이 구멍을 파지 않는 한 이것이 문제가되는 변화는 거의 없습니다.

농담:

이것은 git 내부 .git/가 어떤 경우에는 작업 트리 + 에 상대적인 경로를 사용한다는 것을 의미합니다 . 내 경험상 작업 트리는 git의 가장 기본적인 부분을 제외하고는 잘 지원되지 않습니다. 나는 철저히 실험하지 않았고, 내가 가지고 놀지 않은 git 디렉토리 구성 변수가 적절하게 설정되면 Git이 작동 할 것입니다.


-1

권한 문제가있을 수 있습니다. 베어 git 리포지토리를 어떻게 설정했는지 잘 모르겠지만 git사용자 아래에서 실행중인 경우 git사용자가 git pull프로젝트 디렉토리에서 수행 할 수 있는지 확인하십시오 .

선택적으로 후크가 실행될 때 어떤 사용자인지 확인하려면 이것을 시도하십시오.

echo `whoami`

git 사용자로 서버에 ssh하면 문제없이 프로젝트 디렉토리에서 git pull을 사용할 수 있습니다. 스크립트를 실행해야하는 사용자 라고 생각 합니다. 스크립트에 whoami 줄을 추가해 볼 수 있지만 후크로 실행될 때 해당 스크립트의 출력은 어디로 이동합니까? 에코 대신 로그 파일로 출력을 보내야할까요?
— Ty W

무엇 않습니다 echo `whoami`그렇게 whoami하지 않는 이유는 무엇입니까?
— Christoffer Hammarström

후크 스크립트에서 stdout에 대한 출력은 작업을 수행하는 원격에 표시됩니다. 즉, 'git push'라고 말하면 리모컨의 후크 출력이 표준 출력에 표시됩니다.
— ebneter

네, 제가 물건을 가지고 놀면서 알아 차 렸습니다. 매우 편리합니다 :)
— Ty W
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.