Pregunta ¿Cómo hago que Git ignore los cambios en el modo de archivo (chmod)?


Tengo un proyecto en el que tengo que cambiar el modo de archivos con chmod a 777 durante el desarrollo, pero que no debería cambiar en el repositorio principal.

Git retoma en chmod -R 777 . y marca todos los archivos como cambiados. ¿Hay alguna manera de hacer que Git ignore los cambios de modo que se han realizado en los archivos?


1882
2017-10-16 21:43


origen


Respuestas:


Tratar:

git config core.fileMode false

De git-config (1):

core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

los -c la bandera se puede usar para configurar esta opción para comandos únicos:

git -c core.fileMode=false diff

Y el --global flag hará que sea el comportamiento predeterminado para el usuario que ha iniciado sesión.

git config --global core.fileMode false

Advertencia

core.fileMode no es la mejor práctica y debe usarse con cuidado. Esta configuración solo cubre el bit de modo ejecutable y nunca los bits de lectura / escritura. En muchos casos cree que necesita esta configuración porque hizo algo como chmod -R 777, haciendo que todos tus archivos sean ejecutables. Pero en la mayoría de los proyectos la mayoría de los archivos no necesitan y no deberían ser ejecutables por razones de seguridad.

La forma correcta de resolver este tipo de situación es manejar los permisos de carpeta y archivo por separado, con algo como:

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

Si haces eso, nunca necesitarás usar core.fileMode, excepto en un entorno muy raro.


3109
2017-10-16 21:53



Deshacer cambio de modo en el árbol de trabajo:

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x

O en mingw-git

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x

246
2018-01-18 02:20



Si desea establecer esta opción para todos sus repositorios, use la --global opción.

git config --global core.filemode false

Si esto no funciona, probablemente estés usando una versión más nueva de git así que prueba el --add opción.

git config --add --global core.filemode false

Si lo ejecuta sin la opción --global y su directorio de trabajo no es un repositorio, obtendrá

error: could not lock config file .git/config: No such file or directory

115
2018-04-21 12:00



Si

git config --global core.filemode false

no funciona para usted, hágalo manualmente:

cd into yourLovelyProject folder

cd en la carpeta .git:

cd .git

edite el archivo de configuración:

nano config

cambiar verdadero a falso

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

guardar, salir, ir a la carpeta superior:

cd ..

reinicia el git

git init

¡estás listo!


66
2017-08-06 13:10



Añadiendo a Respuesta de Greg Hewgill (de uso core.fileMode variable de configuración):

Puedes usar --chmod=(-|+)x opción de git update-index (versión de bajo nivel de "git add") para cambiar los permisos de ejecución en el índice, desde donde sería recogido si usa "git commit" (y no "git commit -a").


48
2017-10-16 22:03



Puede configurarlo globalmente:

git config --global core.filemode false

Si lo anterior no funciona para usted, la razón podría ser que su configuración local anula la configuración global.

Elimine su configuración local para que la configuración global surta efecto:

git config --unset core.filemode

Alternativamente, puede cambiar su configuración local al valor correcto:

git config core.filemode false


32
2018-01-21 09:12



Si has usado chmod comando ya entonces verifique la diferencia de archivo, muestra el modo de archivo anterior y el modo de archivo actual, como:

modo nuevo: 755

modo antiguo: 644

establecer el modo antiguo de todos los archivos usando el comando debajo

sudo chmod 644 .

Ahora establezca core.fileMode en false en el archivo de configuración, ya sea mediante comando o manualmente.

git config core.fileMode false

luego aplique el comando chmod para cambiar los permisos de todos los archivos como

sudo chmod 755 .

y nuevamente establezca core.fileMode en true.

git config core.fileMode true

Para mejores prácticas, no mantenga core.fileMode false siempre.


15
2017-10-13 07:34



Si desea establecer el modo de archivo como falso en los archivos de configuración de forma recursiva (incluidos los submódulos): find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


14
2017-07-16 12:23



Al definir el siguiente alias (en ~ / .gitconfig), puede deshabilitar temporalmente el modo fileMode por git:

nfm = "!f(){ git -c core.fileMode=false $@; };f"

Cuando este alias está prefijado al comando git, los cambios en el modo de archivo no aparecerán con comandos que de otra manera los mostrarían. Por ejemplo:

git nfm status

14
2017-07-24 15:01



Solución simple:

Golpea esto Elogio simple en la carpeta del proyecto (no eliminará tus cambios originales) ... solo será eliminar cambios lo que había sido hecho mientras cambiaste permiso de carpeta de proyecto

elogio está abajo:

git config core.fileMode false

Por qué este archivo innecesario se modifica: porque ha cambiado los permisos de la carpeta del proyecto con elogio sudo chmod -R 777 ./yourProjectFolder

¿Cuándo verificará los cambios? ¿Qué no hizo? lo encontraste abajo mientras usabas git diff nombre de archivo

enter image description here


1
2018-03-19 13:13