我有一个花哨的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)进行了测试;这也存在于先前版本中。
答案 0 :(得分:2)
Cygwin似乎没有办法关闭UNC路径支持,但您可以通过在您的环境中设置GIT_CEILING_DIRECTORIES
来快捷搜索。我的.zshenv
有:
export GIT_CEILING_DIRECTORIES=/:$HOME
终止任何搜索/(避免// HEAD)以及$ HOME,因为我知道它不在回购中。
答案 1 :(得分:0)
看起来它将在上游git中修复。参考:discussion thread,patch
答案 2 :(得分:0)
git尝试统计
//HEAD
对于Git 2.15.x / 2.16(2018年第一季度),它确实已在上游修复,并且它更正了启动顺序,以便可以将存储库再次置于根目录下(在周围被破坏) Git 2.13)。
commit fa4d8c7见Jeff 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
的服务器。 让我们简单地避免意外的双斜线。