¿Cómo corregir el informe `git` `detectó propiedad dudosa en el repositorio` sin agregar `safe.directory` al usar WSL?

5 minutos de lectura

Avatar de usuario de Xavi Montero
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):

Accede a linxux desde git bash

O de forma nativa en la terminal bash de WSL:

Acceda a Linux desde wsl bash

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:

error en git-bash

Mientras que en el WSL-Linux no lo hace, para el mismo directorio:

no hay error en wsl-bash

¿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:

identificaciones de linux

Y desde el lado de Windows también coincide con el disco duro y el id:

ID de Windows

Pregunta

¿Cómo puedo saber la propiedad que se espera de git para que no se queje?

  • 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

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 mi wsl 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() siendo GIT_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 de ensure_valid_ownership()que se define en la línea 1144 y a su vez esta depende de is_path_owned_by_current_user(). que termina siendo un alias aquí compat/mingw.h a is_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

¿Ha sido útil esta solución?