2014-11-14 2 views
5

현재 bash (https://github.com/magicmonty/bash-git-prompt)에 대한 자식 프롬프트 프로젝트를 유지하고 있으며 Docker에서 일하는 사람이 버그 프롬프트 (https://github.com/magicmonty/bash-git-prompt/issues/97)를 받았는데 프롬프트를 사용할 때마다 캐시가 무효화되고, 왜냐하면 .git 디렉토리는 지속적으로 접촉하기 때문입니다.누군가 "git status"가 .git 디렉토리를 터치하는 이유를 설명 할 수 있습니까?

나는 이것을 조사해 git status이라는 명령으로 .git 디렉토리를 처리한다는 것을 알아 냈습니다. 그것은 디렉토리 엔트리 그 자체와 아무런 내용도 만지는 것처럼 보입니다. 누구나 설명 할 수 있습니까? 왜 이것이 필요한지, 아니면 Git의 버그 일 수 있습니다.

.git 디렉토리를 건드리지 않고 모든 상태 정보를 표시 할 수있는 방법이 있습니까? 도움을

감사

업데이트 :

git status 명령을 사용하려면 전체 이유 이었기 때문에

, 나는 잠금을 필요로하지 않는, git ls-files --others --exclude-standard | wc -l로 대체, 비 추적 파일의 수를 결정하는 .

+4

'strace git status'를 보면,이 동작은 lockfile'.git/index.lock'을 사용한다는 것을 알 수 있습니다. –

답변

6

strace git status은 잠금 파일 .git/index.lock을 사용한다는 것을 보여 주므로 .git의 mtime이 업데이트됩니다.

git 시원한 환경 변수 GIT_INDEX_FILE을 사용하여 사용할 잠금 파일을 결정합니다. 설정을 해제하면 git.git/index (기본값)이지만, 설정하면 git은 해당 값을 사용합니다. man git에서 :

GIT_INDEX_FILE

이 환경은 다른 인덱스 파일의 지정을 할 수 있습니다. 지정하지 않으면 $GIT_DIR/index의 기본값이 사용됩니다.

그래서 :

GIT_INDEX_FILE=banana git status 

당신의 .git의가 mtime에 업데이트되지 않습니다.

이제 경로를 따라 가야 할지를 결정해야합니다 (확실하게 많은주의 사항이 있음).

행운을 빈다.

+0

그게 효과가 있습니다. 감사. – magicmonty

+0

'git status' 명령을 사용하기 전에 색인 파일을 주어진 새로운 파일에 복사해야한다는 점에 유의해야합니다. 그렇지 않으면 자식은 빈 인덱스를 찾습니다. – magicmonty

+0

@magicmonty 한 가지 방법은 링크를 만드는 것입니다 (복사하지는 않음). –