Cambios de permisos en Git — qué son y cómo manejarlos
Published Oct 2, 2023
¿Alguna vez ejecutaste git status
y te aparecieron demasiadoszzs archivos modificados, aunque no tocaste una sola línea de código?
Eso fue exactamente lo que me pasó: 36 archivos marcados como cambiados, pero al revisar con VSCode o git diff
, no había ningún cambio de contenido.
Entonces... ¿qué estaba pasando?
🔍 El problema: cambios de permisos en los archivos
Cuando ejecuté:
git diff
Lo único que aparecía eran líneas como esta:
old mode 100644
new mode 100755
Eso significa que lo único que cambió fueron los permisos del archivo.
Git, por defecto, trackea si un archivo tiene permisos de ejecución.
Si un archivo cambia de 644
(lectura/escritura) a 755
(lectura/escritura/ejecución), Git lo detecta como un cambio aunque el contenido no haya cambiado.
Esto puede pasar cuando:
- Alguien extrae un
.zip
con permisos diferentes. - Se mueve el proyecto entre sistemas operativos distintos.
- Se trabaja en distintas máquinas con configuraciones de Git distintas.
- Se usan herramientas o IDEs que cambian permisos automáticamente.
🤔 ¿Por qué importa esto?
En un proyecto con muchos archivos, estos cambios generan ruido innecesario en el historial de Git.
Y si no sabés qué significa, podés pensar que alguien modificó el código, cuando en realidad sólo cambió un bit de permisos.
Pero también puede ser más serio:
En un entorno productivo, los permisos de archivos son críticos para la seguridad.
Por ejemplo:
- Un archivo con permisos de ejecución abiertos (
755
) podría permitir que alguien ejecute código malicioso si logra inyectar algo. - Un archivo de configuración sensible podría quedar sobreescribible o ejecutable sin que lo notes.
✅ La solución: ignorar cambios de permisos (cuando corresponda)
Si los cambios son innecesarios y sabés que los permisos no deberían importar en tu proyecto, podés decirle a Git que los ignore:
git config core.fileMode false
Este comando le dice a Git:
“No me muestres los archivos como modificados solo por sus permisos.”
🔁 Si querés que se aplique a todo tu sistema, agregá --global al comando.
git config --global core.fileMode false
⚠️ Pero ojo...
Este comando no cambia los permisos del archivo en tu sistema operativo.
Tampoco resuelve el problema si los permisos realmente importan (como en producción, scripts o binarios).
Si usás Docker o tenés un proceso de deploy, te conviene tener una rutina que normalice los permisos automáticamente (por ejemplo, asegurarte de que los .sh
tengan permisos de ejecución, pero los .env
no).
🧠 En resumen
- Git detecta cambios de permisos como cambios reales si
core.fileMode
está activado. - Esto puede generar confusión si no entendés por qué Git dice que el archivo cambió.
- Usá
core.fileMode false
para ignorarlo solo si sabés que no te afecta. - Siempre prestá atención a los permisos en entornos productivos o sensibles.