Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谁能解释一下,为什么;“git状态”;触摸.git目录?_Git_Bash_Github_Git Status - Fatal编程技术网

谁能解释一下,为什么;“git状态”;触摸.git目录?

谁能解释一下,为什么;“git状态”;触摸.git目录?,git,bash,github,git-status,Git,Bash,Github,Git Status,我目前为bash()维护了一个git提示符项目,我刚从Docker的同事那里得到一个bug报告(),他告诉我,每次他使用提示符时,缓存都会失效,因为.git目录会不断被触动 我研究了一下,发现是命令git status,它触及了.git目录。 看起来,只有目录条目本身,没有内容被触摸。 谁能解释一下,为什么需要这样做,或者这可能是Git中的一个bug 是否有一种方法可以显示所有状态信息,而不必触摸.git目录 谢谢你的帮助 更新: 由于使用git status命令的全部原因是,为了确定未跟踪文件

我目前为bash()维护了一个git提示符项目,我刚从Docker的同事那里得到一个bug报告(),他告诉我,每次他使用提示符时,缓存都会失效,因为
.git
目录会不断被触动

我研究了一下,发现是命令
git status
,它触及了
.git
目录。 看起来,只有目录条目本身,没有内容被触摸。 谁能解释一下,为什么需要这样做,或者这可能是Git中的一个bug

是否有一种方法可以显示所有状态信息,而不必触摸.git目录

谢谢你的帮助

更新:


由于使用
git status
命令的全部原因是,为了确定未跟踪文件的数量,我将其替换为
git ls文件——其他文件——排除不需要锁的标准| wc-l

strace git status
显示此操作使用锁文件
.git/index.lock
,这就是
.git
的mtime被更新的原因

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

GIT\u索引文件

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

因此:

不会更新您的
.git
的mtime

因此,您现在必须做出决定,决定是否要沿着这条路走(这当然有很多警告)


祝你好运

快速浏览
strace git status
会发现此操作使用了一个lockfile
.git/index.lock
应该注意的是,在使用
git status
命令之前,必须将索引文件复制到给定的新文件中。否则git会在这里找到一个空索引。@magicmonty一种可能是创建链接(而不是复制)。但这有点冒险,因为这完全是围绕锁定机制的思想工作的。我怀疑有一个很好的理由,为什么这些文件会被锁定。有了一个链接,你就有可能同时读,同时写。在最好的情况下,只是状态错误,但在最坏的情况下,这可能导致索引损坏。
GIT_INDEX_FILE=banana git status