Git Extensions中的期刊背景“git status”会干扰交互式工作

时间:2016-12-12 08:00:54

标签: git git-extensions

我同时使用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?

2 个答案:

答案 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 5e83ccaJeff 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中找到答案,那么这将解决您的问题。