Xavi Montero
Usé git durante los últimos años en este contexto:
- Anfitrión = mi computadora portátil, Windows.
- WSL habilitado
- Los repositorios viven en el lado de Linux.
- Accedo a ambos desde el lado de Linux y Windows.
Puedo acceder a los archivos en Linux a través de git-bash
así (a través de la //wsl$/
Cuota):
O de forma nativa en la terminal bash de WSL:
Esos accesos van al mismo directorio.
Error
Ahora pasa que si lo hago git status
dentro de un repositorio desde el lado de Windows da el error fatal: detected dubious ownership in repository at
:
Mientras que en el WSL-Linux no lo hace, para el mismo directorio:
¿Desde cuando?
No sucedió antes. He estado usando esta configuración durante años. Esto comenzó a suceder hace 2 días.
De hecho, instalé una versión más nueva de git-bash
Hace 2 días y sospecho que el entorno bash podría condicionar esto.
Trabajo con alrededor de 100 repositorios, y he encontrado fallas en todos los que he probado (alrededor de 10 repositorios). Se espera que suceda con esos 100 repositorios.
No se ha tocado ninguno de esos repositorios que antes funcionaban y ahora fallan, por lo que ninguno de los dos usuarios, ninguno de los dos los permisos han cambiado.
Entonces, mutar de “bien” a “malo” no está en el lado del sistema de archivos, debe estar en el lado de git-bash.
Problema
No quiero simplemente incluirlo en la lista blanca con safe.directory
. Quiero entender lo que está pasando detrás de escena. Por qué sucede hoy y no hace 3 días. Quiero saber “qué espera git” y ver cómo puedo corregirlo.
Investigación hasta ahora
Los usuarios parecen correctos. Desde el lado de Linux:
Y desde el lado de Windows también coincide con el disco duro y el id
:
Pregunta
¿Cómo puedo saber la propiedad que se espera de git
para que no se queje?
De hecho, instalé una versión más nueva de git-bash hace 2 días y sospecho que el entorno bash podría condicionar esto.
Según tengo entendido, instaló una nueva versión de Git para Windows, que incluye Git Bash. Las versiones más recientes de Git, a partir de la 2.35.2 y la 2.36, incluido Git para Windows, son más estrictas en cuanto a la propiedad de los directorios: https://github.blog/2022-04-18-highlights-from-git-2-36/#stricter-repository-ownership-checks.
cuando usas git
de Git Bash, usa el programa de Windows, incluso si cd
hacia //wsl$/
montar. Git para Windows no tiene ningún código especial para gestionar los permisos del montaje WSL, por eso aparece el error. No puedes arreglar eso sin modificando el código fuente de Git.
Una alternativa podría ser utilizar wsl git
en vez de git
cuando esté en Git Bash, que luego usaría el ejecutable de Linux.
O, como escribiste, simplemente usa git config --global safe.directory '*'
para eludir esa función de seguridad si no se considera en riesgo.
-
Ya veo. Usando
wsl git
no será tan trivial como miwsl
está configurado para comenzar en ciertas fábricas y, en general, proporciona una CLI para la GUI (por ejemplo, SourceTree). Estaría feliz de contribuir al código fuente de git tratando de superar el//wsl$/
explorando más, pero como no tengo el entorno para compilar git y también necesitamos parchear git de una manera más restrictiva que las solicitudes de extracción habituales, tengo miedo de intentar contribuir y terminar en una contribución estéril. .. ¿Algún consejo sobre cómo contribuir al código fuente de git sin demasiados gastos generales?–Xavi Montero
25 de agosto a las 14:36
-
veo aquí github.com/git/git/blame/… en la línea 1483 que el responsable es el resultado de
setup_git_directory_gently_1()
siendoGIT_DIR_INVALID_OWNERSHIP
. Además, los únicos lugares donde se puede asignar dentro de las funciones son las líneas 1329 y 1351 y ambas asignaciones dependen deensure_valid_ownership()
que se define en la línea 1144 y a su vez esta depende deis_path_owned_by_current_user()
. que termina siendo un alias aquícompat/mingw.h
ais_path_owned_by_current_sid
. ¿Es que necesitamos parchear git? O WSL?–Xavi Montero
25 de agosto a las 14:57
-
Primero comenzaría abriendo un problema en github.com/git-for-windows/git/issues, con un reproductor mínimo, y ver qué sale de la discusión. El mantenedor de Git para Windows suele ser muy útil y debería poder guiarlo.
– philb
25 de agosto a las 15:58
-
¡Gracias! Esta fue la solucion a mi problema
git config --global safe.directory '*'
– Eric Hepperle – CodeSlayer2010
18 oct a las 19:23
usar git config --global safe.directory '*'
eludir las medidas de seguridad
-
¿No está esto ya en la respuesta aceptada?
– ratón grande
1 de noviembre a las 10:12
-
Sin embargo, no estoy convencido de que funcione debido a los cambios de WLS en gIt
– ratón grande
1 de noviembre a las 10:18
-
@bigbadmouse este comando bien en mi wsl
-Arnold Ighiwiyisi
2 de noviembre a las 16:25
-
Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente reputación, podrá comentar cualquier publicación; en cambio, proporcionar respuestas que no requieran aclaración por parte del autor de la pregunta. – De la revisión
– hide1nbush
7 de noviembre a las 8:00
Otros pueden estar en desacuerdo, pero diré que esta es una publicación bien organizada y merece reconocimiento por ese hecho. Es fácilmente escaneable y expresa frustración sin quejarse. Buen trabajo
– Eric Hepperle – CodeSlayer2010
18 oct a las 19:24