git intenta registrar // HEAD cuando busca un repository, lo que provoca grandes retrasos en Cygwin

Tengo un elegante aviso de shell que ejecuta git rev-parse --is-inside-work-tree para determinar si estamos actualmente dentro de un directory de trabajo. Esto hace que git suba la jerarquía de directorys buscando un contenedor que contenga git repo. Por ejemplo, cuando se invoca desde mi directory de inicio, registra las siguientes routes, en order:

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

El último nombre ( //HEAD ) interactúa mal con Cygwin, que lo interpreta como un recurso compartido de files UNC, por lo que solicita un montón de DLL adicionales e intenta resolver / contactar al server llamado HEAD . Obviamente, esto no funciona demasiado bien, especialmente a través de un enlace de networking lento.

Esto huele a error en git, aunque probablemente sea inofensivo en plataforms sin la extraña interpretación de //, así que estoy buscando una solución.

He probado con el último Cygwin git (2.15.0); esto también estuvo presente en una versión anterior.

git intenta hacer una estadística //HEAD

De hecho, se ha corregido en sentido ascendente, para Git 2.15.x / 2.16 (Q1 2018), y corrige la secuencia de inicio para que un repository se coloque inmediatamente debajo del directory raíz (que se rompió alnetworkingedor de Git 2.13) .

Ver commit fa4d8c7 (03 Nov 2017) por Jeff King ( peff ) .
(Fusionado por Junio ​​C Hamano – gitster – in commit 57dd3dd , 09 Nov 2017)

setup : evitar dobles barras al search HEAD

Andrew Baumann informó que cuando se llama fuera de cualquier tree de trabajo de Git, git rev-parse --is-inside-work-tree finalmente intenta acceder //HEAD , es decir, cualquier file HEAD en el directory raíz, pero con una barra doble.

Esta doble barra no solo es involuntaria, sino que el estándar POSIX le permite tener un significado especial. Y más notablemente en Windows, lo hace, cuando se refiere a una ruta de acceso UNC del formulario //server/share/ .

Como consecuencia, la llamada rev-parse antes mencionada no solo busca algo incorrecto, sino que también causa serias demoras, ya que Windows intentará acceder a un server llamado HEAD .
Simplemente evitemos la doble barra involuntaria.

Cygwin no parece tener ninguna forma de desactivar el soporte de ruta UNC, pero puede GIT_CEILING_DIRECTORIES la búsqueda configurando GIT_CEILING_DIRECTORIES en su entorno. Mi .zshenv tiene:

 export GIT_CEILING_DIRECTORIES=/:$HOME 

Que termina cualquier búsqueda en / (evitando // HEAD) pero también en $ HOME, ya que sé que no está dentro de un repository.

Parece que se solucionará en git upstream. Refs: hilo de discusión , parche