업데이트 후 후크를 사용하여 다른 저장소에서 '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 PWDGIT_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.