当搜索回购时,git尝试stat // HEAD,导致Cygwin的巨大延迟

时间:2017-11-02 21:07:10

标签: git cygwin

我有一个花哨的shell提示符,执行git rev-parse --is-inside-work-tree以确定我们当前是否在工作目录中。这会导致git走向目录层次结构,寻找包含git repo的内容。例如,从我的主目录调用时,它按顺序统计以下路径:

/home/me/.git
/home/me/.git/HEAD
/home/me/HEAD
/home
/home/.git
/home/.git/HEAD
/home/HEAD
/
/.git
/.git/HEAD
//HEAD

姓氏(//HEAD)与Cygwin交互不良,后者将其解释为UNC文件共享,因此需要加载一堆额外的DLL并尝试解析/联系名为{{1}的服务器}。这显然不能很好地工作,特别是在慢速网络链接上。

这就像git中的一个臭虫,虽然在没有对//的奇怪解释的平台上可能是无害的,所以我正在寻找一种解决方法。

我已经使用最新的Cygwin git(2.15.0)进行了测试;这也存在于先前版本中。

3 个答案:

答案 0 :(得分:2)

Cygwin似乎没有办法关闭UNC路径支持,但您可以通过在您的环境中设置GIT_CEILING_DIRECTORIES来快捷搜索。我的.zshenv有:

export GIT_CEILING_DIRECTORIES=/:$HOME

终止任何搜索/(避免// HEAD)以及$ HOME,因为我知道它不在回购中。

答案 1 :(得分:0)

看起来它将在上游git中修复。参考:discussion threadpatch

答案 2 :(得分:0)

  

git尝试统计//HEAD

对于Git 2.15.x / 2.16(2018年第一季度),它确实已在上游修复,并且它更正了启动顺序,以便可以将存储库再次置于根目录下(在周围被破坏) Git 2.13)。

commit fa4d8c7Jeff King (peff)(2017年11月3日) Junio C Hamano -- gitster --于2017年11月9日commit 57dd3dd合并)

  

setup:在寻找HEAD

时避免使用双斜线      

Andrew Baumann报告说,当在任何Git工作树之外调用时,git rev-parse --is-inside-work-tree最终会尝试访问//HEAD,即根目录中的任何HEAD文件,但是使用双斜杠。< / p>      

这个双斜线不仅是无意的,而且POSIX标准允许具有特殊含义。最值得注意的是在Windows上,它确实引用了//server/share/形式的UNC路径。

     

因此,上述rev-parse调用不仅会查找错误的内容,而且还会导致严重的延迟,因为Windows将尝试访问名为HEAD的服务器。   让我们简单地避免意外的双斜线。