Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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:不要为只读操作创建index.lock_Git_Lockfile - Fatal编程技术网

Git:不要为只读操作创建index.lock

Git:不要为只读操作创建index.lock,git,lockfile,Git,Lockfile,有没有办法强制git不为诸如git status之类的只读操作创建index.lock 我正在tmux中显示我的工作树的状态,每隔几秒钟更新一次。基本上,我解析了git status--branch--ignored--和其他一些命令的输出。问题是,对于大型存储库,git status可能需要几秒钟才能完成。在此期间,我无法运行任何其他git命令,因为存储库已锁定 编辑: 以下是我的tmux系列相关部分的一些图片。从左到右的符号说明: 与远程分支同步| 2个暂存更改| 1个未暂存更改| 5个忽略

有没有办法强制git不为诸如
git status
之类的只读操作创建index.lock

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

编辑:

以下是我的tmux系列相关部分的一些图片。从左到右的符号说明:

与远程分支同步| 2个暂存更改| 1个未暂存更改| 5个忽略的文件| 1个隐藏条目:

与远程分支同步|工作树中无更改| 5忽略的文件:

提前远程分支1提交|工作树中无更改|忽略5个文件:

使用“GIT\u INDEX\u 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

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

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

sudo -u nobody git status

好问题<代码>状态锁定索引,以便它可以更新统计缓存。我没有从文档中看到一个明显的方法来禁用它,但值得知道您放弃了什么:未来的
status
调用将不得不重新计算缓存的工作。这在您的脚本中可能不是最优的。丢失缓存对我来说没有问题。正如我所说,它只用于显示工作树的当前状态。我时不时地运行
git status
。我解析
git status
的输出。您不应该这样做,因为
git状态
是瓷器(高级)。您应该分析较低级别的Git命令的输出,而不是回答“不要这样做”,您能进一步解释一下您的评论吗?解析
git status--branch--ignored--ceral
到底有什么错,应该用什么来代替呢?@keks足够公平;如果您使用
--cerial
标志,您应该不会有问题。否则,您将依赖于经过处理的更高级别的输出,这可能会在未来的Git版本中发生变化。我真正想看到的是存储库的当前状态。信息每隔几秒钟自动更新一次。所以理论上我可以“实时”跟踪变化。@keks,我用
cp
idea更新了我的答案。我很好奇,请试着说它是否工作正常。看起来cp版本的工作原理与预期相符。到目前为止,我没有遇到任何问题。即使一个损坏的索引被复制,这也没那么糟糕。当我注意到一个错误时,状态已经被更新了。