我同时使用Git Extensions和命令行(我使用git-tfs,所以应该使用命令行进行push / fetch)。
但是如果我尝试从没有关闭的Git Extensions窗口的命令行推送更改,它通常会以错误结束
fatal: Unable to create '.git/index.lock': File exists.
明显的原因 - Git Extensions定期执行git status,它会创建锁定文件并阻止推送。
我找到了解决方案 - 在使用控制台工作之前关闭Git Extensions,但它不是很方便,我经常忘记它。
我还能在这做什么?可能以某种方式禁用git status的create lock?
答案 0 :(得分:1)
虽然此问题是由git status
锁定引起的,但 也可以通过Git Extensions 的设置更改来缓解,而无需在选择前关闭Git Extensions在其他地方执行Git工作:我大部分工作都是在“其他地方”进行的,因此关闭Git扩展并不是一项有趣的长期策略:}
从twinsec上的https://github.com/cmderdev/cmder/issues/1044-
对于任何人使用索引锁遇到相同的问题,都有一种解决方法[by]
- 禁用 设置-> Git扩展->性能->显示已更改文件的数量
[..],以便Git扩展不会在任何文件更新时立即调用git状态,这会阻止当前正在处理的git命令并引入锁定。
希望对您有帮助。
答案 1 :(得分:0)
Git 2.14已经建议对git status
进行后台更新, Git Extensions 最终可能会从中受益:
commit 5e83cca见Jeff King (peff
)(2017年11月27日)
(由Junio C Hamano -- gitster
--合并于commit e6bf6af,2017年12月13日)
git-status.txt
:提及--no-optional-locks
如果您来到文档中思考“我不希望Git对我的后台进程采取任何锁定”,那么您可能很容易在
--no-optional-locks
中遇到“git.txt
”。但是找到问题的特定实例是非常合理的:你在后台运行“
git status
”,并且你注意到它会导致与其他进程的锁争用。所以你查看git-status.txt
以查看是否有办法禁用它,但没有提到标志。让我们添加一个简短的提示,说明状态的确如此 触摸索引(以及为什么),指向全局选项。这可以指导用户朝着正确的方向前进,并帮助他们对他们禁用的内容做出更明智的决定。
所以git status
man page现在读取:
背景刷新
默认情况下,
git status
会自动刷新索引并进行更新 来自工作树的缓存的统计信息并写出来 结果。
写出更新的索引是一种优化,而不是 严格必要(status
计算自身的价值,但写作 他们只是为了保存后续程序不再重复我们的 计算)。
在后台运行status
时,写入期间保持的锁可能与其他同时进程冲突,导致它们失败。
后台运行status
的脚本应该考虑 使用git --no-optional-locks status
。
如果最后一句话能够在Git Extensions中打包的嵌入式Git中找到答案,那么这将解决您的问题。