usar - ignorar cambios git
¿Cómo hago para que Git ignore los cambios de modo de archivo(chmod)? (11)
Agregando a la respuesta de Greg Hewgill (de usar la variable de configuración core.fileMode
):
Puede usar la --chmod=(-|+)x
de git update-index (versión de bajo nivel de "git add") para cambiar los permisos de ejecución en el índice, desde donde se seleccionaría si usa "git commit "(y no" git commit -a ").
Tengo un proyecto en el que tengo que cambiar el modo de los archivos con chmod
a 777 durante el desarrollo, pero no debería cambiar en el repositorio principal.
Git recoge 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 hecho a los archivos?
Al definir el siguiente alias (en ~ / .gitconfig), puede desactivar fácilmente el comando fileMode per git:
nfm = "!f(){ git -c core.fileMode=false $@; };f"
Cuando este alias está prefijado al comando git, los cambios de modo de archivo no se mostrarán con comandos que de otra manera los mostrarían. Por ejemplo:
git nfm status
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
Esto funciona para mí:
find . -type f -exec chmod a-x {} /;
o marcha atrás, dependiendo de su sistema operativo.
find . -type f -exec chmod a+x {} /;
Puedes 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 anule la configuración global.
Elimine su configuración local para que la configuración global tenga efecto:
git config --unset core.filemode
Alternativamente, puede cambiar su configuración local al valor correcto:
git config core.filemode false
Si
git config --global core.filemode false
No funciona para ti, hazlo manualmente:
cd into yourLovelyProject folder
cd en la carpeta .git:
cd .git
Editar el archivo de configuración:
nano config
cambia de verdadero a falso
[core]
repositoryformatversion = 0
filemode = true
->
[core]
repositoryformatversion = 0
filemode = false
guardar, salir, ir a la carpeta superior:
cd ..
reiniciar el git
git init
¡estás listo!
Si desea configurar esta opción para todos sus --global
, use la opción --global
.
git config --global core.filemode false
Si esto no funciona, probablemente estés usando una versión más reciente de git, así que prueba la opción --add
.
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
Si desea establecer filemode en falso en archivos de configuración recursivamente (incluidos los submódulos): find -name config | xargs sed -i -e ''s/filemode = true/filemode = false/''
find -name config | xargs sed -i -e ''s/filemode = true/filemode = false/''
Si ya ha utilizado el comando chmod , verifique la diferencia de archivo, muestra el modo de archivo anterior y el modo de archivo actual, como:
nuevo modo: 755
modo antiguo: 644
establece el modo antiguo de todos los archivos usando el comando de abajo
sudo chmod 644 .
ahora establezca core.fileMode en falso en el archivo de configuración usando el 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 verdadero.
git config core.fileMode true
Para las mejores prácticas, no mantener el core.fileMode falso siempre.
Tratar:
git config core.fileMode false
Desde 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.
El -c
se puede usar para configurar esta opción para comandos únicos:
git -c core.fileMode=false diff
Y la bandera --global
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 ejecutable de modo 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 sus 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 carpetas y archivos 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 lo hace, nunca necesitará usar core.fileMode
, excepto en entornos muy raros.
Solución simple:
Haga clic en esta recomendación simple en la carpeta del proyecto ( no eliminará sus cambios originales) ... solo eliminará los cambios que se hayan realizado mientras usted cambió el permiso de la carpeta del proyecto
elogio está abajo:
git config core.fileMode falso
Por qué se modifica todo este archivo innecesario: porque ha cambiado los permisos de la carpeta del proyecto con commend sudo chmod -R 777 ./yourProjectFolder
¿Cuándo comprobarás los cambios que no hiciste? Lo encontraste como abajo mientras usabas el nombre de archivo git diff