2017-09-29 4 views

답변

4

GIT_DIR 변수가 자식에 의해 --git-dir 옵션이 같은 방법을 사용한다. git은 저장소의 위치를 ​​, 이며 작업 디렉토리 내의 .git 디렉토리입니다.

export GIT_DIR="$(git rev-parse --show-toplevel)/.git" 인 경우 작동해야합니다.

변수를 내 보내면 쉘이 호출하는 프로그램에 대한 변수 변수 인 으로 사용할 수 있습니다. 내보내기하지 않으면 변수 일 뿐이며 스크립트의 컨텍스트 내에서만 볼 수 있으며 스크립트가 호출하는 프로그램은 볼 수 없습니다. 그래서 ... export없이 GIT_DIR을 설정하면 git 명령을 숨 깁니다 ... 그러나 일단이 마법, 중요한 변수를 내 보내면이 환경 변수가 중요하다고 생각하기 때문에 git를 혼동하게됩니다.

+2

좋은 설명. 나는 이것이 베어 리포 지 토리 (bare repositories)에서 똑같이 작동하지 않을 것이라고 생각한다. 아마도 가장 좋은 해결책은 단순히 환경 변수를 변경하지 않는 것이다.'cd "$ (git rev-parse --show-toplevel)"' 가장 간단한 일. –

+0

감사합니다. Tom. :) 그리고 예, 나의 일반적인 전략은 데이터의 단일 사용을위한 변수의 사용을 피하는 것입니다. 명령어 치환은 아마도 함수로 잘 작동 할 것이다. – ghoti

0

export 문을 제거하면 문제가 해결됩니다.

이 나를 위해 작동합니다

GIT_DIR="$(git rev-parse --show-toplevel)" 
cd "$GIT_DIR" 
git status 
+1

왜 '내보내기'가 작동하면 작동을 멈 춥니 까? –

+0

내 생각에 "수출 가능한"변수와 수출되지 않은 변수 간에는 다른 점이 있습니다. – Filype

+0

또한'$ GIT_DIR'은 git에서 사용하는 예약 변수이지만 그 증거를 찾을 수 없다고 생각했습니다 – Filype