el modo de informe de git diff cambia después de mover el repositorio

3 minutos de lectura

Moví un montón de mis repositorios de git a otro sistema operativo copiándolos en un disco duro externo. Y ahora cuando lo hago git diff informa que todos los modos de archivos han cambiado.

diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.npmignore b/.npmignore
old mode 100644
new mode 100755
diff --git a/.travis.yml b/.travis.yml
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755

Realmente no sé mucho sobre permisos de archivos, ¿qué se supone que debo hacer al respecto?

¿Confirmar los cambios de modo? ¿Volver a cambiar el modo para todos los archivos no ejecutables? reiniciar?

  • ¿De qué sistema operativo y de qué sistema operativo?

    –Michael Durrant

    12 de enero de 2012 a las 22:19

  • @fent: ¿podría revisar la respuesta aceptada y observar los votos a favor y la simplicidad de la segunda respuesta?

    –Ross Attrill

    29 de agosto de 2021 a las 4:40

  • las dos respuestas son diferentes. aunque el segundo es más simple, implica desactivar el seguimiento de los modos de archivo, lo que podría no ser aplicable a todos los repositorios.

    – cercado

    8 sep 2021 a las 0:30

avatar de usuario
ross attrill

Puede aplicar esta configuración

git config core.filemode false

haciendo que git ignore las diferencias en el modo de archivo.

Esta solución se encontró en la respuesta de @kan a otra pregunta

  • @DeaDEnD esto debería haberse marcado como la respuesta correcta en mi opinión, ¿quizás valga la pena mencionarlo en la Q?

    -Nitsan Wakart

    24 de julio de 2015 a las 7:06

  • ¡Muchas gracias! Ninguna de las otras sugerencias como cambiar el formato de final de línea de los archivos, configurar crlf config, restablecer el hardware, nada funcionó. Esto funcionó a las mil maravillas.

    – Nagabhushan SN

    28 de agosto de 2021 a las 3:40

avatar de usuario
carl norum

Probablemente su disco duro externo tenía un sistema de archivos diferente que no respetaba los permisos del archivo original. Simplemente los corregiría a mano antes de comprometerme.

Por ejemplo, FAT32, que se usa comúnmente en unidades de memoria USB, no admite permisos de ejecución. Cuando copia un archivo de un sistema de archivos FAT32 a un sistema de archivos similar a Unix, generalmente establece el permiso de ejecución para todos los archivos, ya que es menos dañino que desactivarlo para todos los archivos.

Si desea conservar ese tipo de información, no copie los archivos directamente en la unidad; en su lugar, cree un archivo tar (opcionalmente comprimido) y luego descomprímalo en el otro extremo. El formato tar realiza un seguimiento de los bits de permiso de Unix.

Tenga en cuenta que git en sí mismo no realiza un seguimiento de más de ejecutable frente a no ejecutable. Si los cambios de modo son la única diferencia y no desea volver a copiar todo, puede convertir la salida de git diff en un guión hace un chmod -x en todos los archivos afectados.

  • SI ese es el caso, simplemente los volveré a transferir de otra manera. Estoy pensando en comprimir todo en un archivo. De ninguna manera voy a corregir todos esos archivos a mano.

    – cercado

    12 de enero de 2012 a las 22:31

  • O reformatee su disco externo con un sistema de archivos más inteligente. ¿De qué FS va/hacia y cuál es el formato del disco externo?

    –Carl Norum

    12 de enero de 2012 a las 22:32

  • desde/hasta: ext4, externo: ntfs

    – cercado

    12 de enero de 2012 a las 23:11

  • Si todos los archivos son +x, puede ejecutar git diff --name-only | xargs chmod -x para eliminar el bit de ejecución de todos los archivos modificados. Un enfoque más cuidadoso y completo sería usar los comandos presentados en esta respuesta, que manejan específicamente los cambios de modo (tanto +x como -x)

    – johnny

    21/09/2015 a las 18:55

¿Ha sido útil esta solución?