Tengo un proyecto en el que tengo que cambiar el modo de los archivos chmod
a 777 durante el desarrollo, pero que no debería cambiar en el repositorio principal.
Git recoge chmod -R 777 .
y marca todos los archivos como modificados. ¿Hay alguna manera de hacer que Git ignore los cambios de modo que se han realizado en los archivos?
git diff
, y que por lo tanto no quiere alterar sus archivos de configuración de Git: se puede usargit diff -G.
por Zed respuesta aquí .Respuestas:
Tratar:
Desde git-config (1) :
El
-c
indicador se puede usar para configurar esta opción para comandos únicos:Y la
--global
bandera hará que sea el comportamiento predeterminado para el usuario conectado.Los cambios de la configuración global no se aplicarán a los repositorios existentes. Adicionalmente,
git clone
ygit init
establecer explícitamentecore.fileMode
quetrue
en la configuración de recompra como se discutió en Git falsa mundial core.fileMode reemplazado de forma local en el clonAdvertencia
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 comochmod -R 777
hacer que todos sus archivos sean ejecutables. Pero en la mayoría de los proyectos, la mayoría de los archivos no necesitan y no deben 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:
Si haces eso, nunca necesitarás usarlo
core.fileMode
, excepto en un entorno muy raro.fuente
git config --global core.filemode false
, solo tendrá que hacer esto una vez para todos los repositorios.git config
comando escribe la configuración en el archivo de configuración correcto (.git/config
solo para el repositorio actual, o~/.gitconfig
si se usa con--global
).cambio de modo de deshacer en el árbol de trabajo:
O en mingw-git
fuente
-d'\n'
partexargs
ya que este es un argumento ilegal (y no es necesario).tr '\n' '\0'
y luego usar el-0
argumento arg para xargs para usar NUL como delimitador.tr
cosa funcionó! Aquí está el comando completo para OSX:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
Si desea establecer esta opción para todos sus repositorios, use la
--global
opción.Si esto no funciona, probablemente esté utilizando una versión más nueva de git, así que pruebe la
--add
opción.Si lo ejecuta sin la opción --global y su directorio de trabajo no es un repositorio, obtendrá
fuente
--add
, como engit config --add --global core.filemode false
Si
no funciona para usted, hágalo manualmente:
cd en la carpeta .git:
edite el archivo de configuración:
cambiar de verdadero a falso
->
guardar, salir, ir a la carpeta superior:
reiniciar el git
¡estás listo!
fuente
.git/config
, un simplegit config core.fileMode false
en la raíz de su proyecto es suficiente. Si edita el archivo de configuración, es mejor que elimine la directiva por completo, de modo que se recoja el global.global
opción de eliminación hace exactamente lo mismo que editar manualmente .git / config~/.gitconfig
~/project/.git/config
git init
¿deberíamos volver a establecer el modo de archivo en verdadero?Agregando a la respuesta de Greg Hewgill (de usar la
core.fileMode
variable de configuración):Puede usar la
--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 se seleccionaría si usa "git commit" (y no "git commit -a ").fuente
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 anule 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
fuente
git config -l
(enumere la configuración actual, tanto local como global)Si ya ha utilizado el comando chmod , compruebe la diferencia de archivo, muestra el modo de archivo anterior y el modo de archivo actual, como:
nuevo modo: 755
modo antiguo: 644
establecer el modo antiguo de todos los archivos con el siguiente comando
sudo chmod 644 .
ahora establezca core.fileMode en falso en el archivo de configuración mediante el comando o manualmente.
luego aplique el comando chmod para cambiar los permisos de todos los archivos, como
y nuevamente establezca core.fileMode en verdadero.
Para las mejores prácticas, no mantenga core.fileMode false siempre.
fuente
For best practises don't Keep core.fileMode false always
a qué te refieres, deberías explicar eso.For best practises don't Keep core.fileMode false always.
Algunos sistemas de archivos (FAT, por ejemplo) no admiten permisos de archivos, por lo que el sistema operativo informará un valor predeterminado (766 en mi sistema de todos modos). En este caso,core.filemode
es absolutamente necesario en la configuración local, a menos que desee hinchar el historial de confirmaciones con cambios de permisos innecesarios e involuntarioscore.filemode=false
, git ignorará los cambios de bits de ejecución, no es necesario cambiar los permisos locales. A menos que ya haya agregado cambios de permisos al índice, en cuyo caso se está perdiendo el paso que necesitaríagit add
después de apagarlocore.filemode
.Al definir el siguiente alias (en ~ / .gitconfig) puede deshabilitar fácilmente temporalmente el comando fileMode per git:
Cuando este alias tiene el prefijo del comando git, los cambios en el modo de archivo no se mostrarán con comandos que de otro modo los mostrarían. Por ejemplo:
fuente
Si desea establecer el modo de archivo en 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/'
fuente
git submodule foreach git config core.fileMode false
Solución simple:
Presione este comando simple en la carpeta del proyecto ( no eliminará sus cambios originales) ... solo eliminará los cambios que se hayan realizado mientras cambió el permiso de la carpeta del proyecto
el comando está abajo:
git config core.fileMode false
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 verificará los cambios que no hizo? que encontraste como a continuación mientras usas el nombre de archivo git diff
fuente
Esto funciona para mi:
o reversa, dependiendo de su sistema operativo
fuente