5

我目前为 bash 的 git-prompt 维护一个项目(https://github.com/magicmonty/bash-git-prompt),我刚刚收到了一个错误报告(https://github.com/magicmonty/bash-git -prompt/issues/97)来自与 Docker 一起工作的人,他告诉我,每次他使用提示时,缓存都会失效,因为.git目录经常被触及。

我对此进行了调查,发现它是 command git status,它触及了.git目录。似乎只有目录条目本身,没有内容被触及。谁能解释一下,为什么需要这样做,或者这可能是 Git 中的一个错误。

有没有办法在不接触 .git 目录的情况下显示所有状态信息?

谢谢您的帮助

更新:

由于使用该git status命令的全部原因是,为了确定未跟踪文件的数量,我将其替换为git ls-files --others --exclude-standard | wc -l不需要锁的 。

4

1 回答 1

7

strace git status表明此操作使用了锁定文件.git/index.lock,这.git就是更新 的 mtime 的原因。

git很酷,它使用环境变量GIT_INDEX_FILE来决定使用哪个锁文件。如果未设置,则git使用 .git/index(这是默认设置),但如果设置,则git使用其值。来自man git

GIT_INDEX_FILE

此环境允许指定备用索引文件。如果未指定,$GIT_DIR/index则使用默认值 of。

所以:

GIT_INDEX_FILE=banana git status

不会更新你.git的 mtime。

所以你现在必须决定是否要沿着这条路走(当然有很多警告)。

祝你好运!

于 2014-11-14T20:27:44.277 回答