10

有没有办法强制 git 不要为只读操作创建 index.lock git status

我在 tmux 中显示我的工作树的状态,每隔几秒钟更新一次。基本上我解析git status --branch --ignored --porcelain和其他一些命令的输出。问题是,大型存储库git status可能需要几秒钟才能完成。在此期间,我无法运行任何其他 git 命令,因为存储库已锁定。

编辑:

这是我的 tmux 线相关部分的一些图片。从左到右的符号说明:

与远程分支同步 | 2 阶段性变化 | 1 个未分阶段的更改 | 5 个被忽略的文件 | 1个存储条目: 在此处输入图像描述

与远程分支同步 | 工作树没有变化| 5 个被忽略的文件: 在此处输入图像描述

通过 1 次提交提前远程分支 | 工作树没有变化| 5 个被忽略的文件: 在此处输入图像描述

4

2 回答 2

9

使用“GIT_INDEX_FILE”环境变量使 git 使用另一个索引文件是什么意思?

因此,要从 HEAD 创建一个新的索引文件,请使用

GIT_INDEX_FILE=.git/other-index git reset

然后你就可以

GIT_INDEX_FILE=.git/other-index git status

查找更改。

它的缺点是,如果主索引将通过 add/rm 命令修改,您将看不到真实状态。但至少它可以让你检测到变化的事实,然后可能做更多的事情来找出真正的区别。

您能否描述更多您正在努力实现的目标?也许我们可以提出其他一些解决方案。

另一个想法。尝试这个:

cp .git/index .git/other-index # or maybe just "ln" once, rather than copying everytime?
GIT_INDEX_FILE=.git/other-index git status

不确定这有多可靠...如果cp在您执行命令时会发生命令git add/rm,您可能会“损坏”索引文件,并且显然会失败,但对于您的使用,我相信它已经足够好了 - 您可以忽略失败并重试。

于 2015-01-09T18:41:34.133 回答
4

快速而肮脏但最安全的是,您可以简单地使用具有只读权限的用户。

sudo -u nobody git status
于 2015-01-12T15:31:42.317 回答