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 searchHEAD
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 fileHEAD
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 llamadoHEAD
.
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