¿Cómo elimino archivos que dicen "modo antiguo 100755 modo nuevo 100644" de cambios no preparados en Git?
Por alguna razón, cuando inicialmente extraje del repositorio un proyecto mío de Git, obtuve un montón de archivos en mi copia de trabajo a los que no se les realizaron cambios perceptibles, pero siguen apareciendo en mi unstaged changes
área.
Estoy usando Git Gui en Windows XP y cuando voy, miro el archivo para ver qué ha cambiado. Todo lo que veo es:
old mode 100755
new mode 100644
Alguien sabe que significa esto?
¿Cómo puedo sacar estos archivos de mi lista de cambios no preparados? (Es muy molesto tener que revisar cientos de archivos, solo para seleccionar los archivos que edité recientemente y quiero confirmar).
Eso me parece modos de permisos de archivos Unix ( 755
= rwxr-xr-x
, 644
= rw-r--r--
): el modo antiguo incluía el indicador +x (ejecutable), el nuevo modo no.
Las respuestas a este problema de msysgit sugieren configurar core.filemode en falso para solucionar el problema:
git config core.filemode false
Configurar core.filemode
en falso funciona, pero asegúrese de que las configuraciones en ~/.gitconfig
no sean anuladas por las de .git/config
.
Para saber con seguridad de dónde core.filemode
proviene la configuración, ejecute el siguiente comando (funciona en cualquier sistema operativo) desde la carpeta raíz del repositorio (o cualquier carpeta debajo de la raíz):
git config --show-origin --show-scope --get-all core.filemode
Esto suele suceder cuando el repositorio se clona entre máquinas Windows y Linux/Unix.
Simplemente dile a git que ignore el cambio de modo de archivo. A continuación se muestran varias formas de hacerlo:
Configuración SÓLO para el repositorio actual:
git config core.filemode false
Configurar globalmente:
git config --global core.filemode false
Agregue ~/.gitconfig:
[core] filemode = false
Simplemente seleccione uno de ellos.
Me encontré con este problema al copiar un repositorio de git con archivos de trabajo desde un disco duro antiguo un par de veces. El problema surge del hecho de que el propietario y los permisos cambiaron del disco/máquina antiguo al nuevo. En pocas palabras, ejecute los siguientes comandos para arreglar las cosas ( gracias a esta respuesta de superusuario ):
sudo chmod -R -x . # remove the executable bit from all files
El comando anterior en realidad resolverá las diferencias que informó git diff, pero revocará su capacidad para enumerar los directorios, por lo que ls ./
falla con ls: .: Permission denied
. Para arreglar eso:
sudo chmod -R +X . # add the executable bit only for directories
La mala noticia es que si tiene archivos que desea mantener ejecutables, como .sh
scripts, deberá revertirlos. Puedes hacerlo con el siguiente comando para cada archivo:
chmod +x ./build.sh # where build.sh is the file you want to make executable again