¿Cómo hago caso omiso de Git modo de archivo (chmod) cambios?
Pregunta
Tengo un proyecto en el que tengo que cambiar el modo de archivos con chmod
a 777 mientras que el desarrollo, pero que no debe cambiar en el repositorio principal.
Git recoge en chmod -R 777 .
y marcas de todos los archivos como cambiado. ¿Hay una manera de hacer caso omiso de Git cambios de modo que se han hecho a los archivos?
Solución
Trate:
git config core.fileMode false
Desde git-config (1) :
core.fileMode Tells Git if the executable bit of files in the working tree is to be honored. Some filesystems lose the executable bit when a file that is marked as executable is checked out, or checks out a non-executable file with executable bit on. git-clone(1) or git-init(1) probe the filesystem to see if it handles the executable bit correctly and this variable is automatically set as necessary. A repository, however, may be on a filesystem that handles the filemode correctly, and this variable is set to true when created, but later may be made accessible from another environment that loses the filemode (e.g. exporting ext4 via CIFS mount, visiting a Cygwin created repository with Git for Windows or Eclipse). In such a case it may be necessary to set this variable to false. See git-update-index(1). The default is true (when core.filemode is not specified in the config file).
La bandera -c
se puede utilizar para configurar esta opción para una sola vez los comandos:
git -c core.fileMode=false diff
Y la bandera --global
hará que sea el comportamiento por defecto para el usuario conectado.
git config --global core.fileMode false
Los cambios de la configuración global no se aplicará a los depósitos existentes.
Además, git clone
y git init
establecen explícitamente core.fileMode
a true
en el config repo como se discute en Git mundial core.fileMode falsa anulado de forma local en el clon
Advertencia
core.fileMode
no es la mejor práctica y deben usarse con cuidado. Este ajuste sólo cubre el bit de ejecución del modo y nunca los bits de lectura / escritura. En muchos casos usted piensa que necesita este ajuste porque hiciste algo así como chmod -R 777
, por lo que todos sus archivos 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 carpeta y permisos de archivo 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, usted no necesita el uso core.fileMode
, excepto en el ambiente muy raro.
Otros consejos
Deshacer cambio de modo de á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
Si desea configurar esta opción para todas sus repos, utilice la opción --global
.
git config --global core.filemode false
Si esto no funciona, es probable que esté utilizando una versión más reciente de Git a fin de tratar la opción --add
.
git config --add --global core.filemode false
Si se ejecuta sin la opción --global y su directorio de trabajo no es un acuerdo de recompra, obtendrá
error: could not lock config file .git/config: No such file or directory
Si
git config --global core.filemode false
no funciona para usted, hacerlo de forma manual:
cd into yourLovelyProject folder
CD en la carpeta .git:
cd .git
editar el fichero de configuración:
nano config
El cambio verdadero a falso
[core]
repositoryformatversion = 0
filemode = true
->
[core]
repositoryformatversion = 0
filemode = false
guardar, salir, ir a la carpeta superior:
cd ..
reinicilizar el git
git init
ya está!
Adición a respuesta Greg Hewgill (de la utilización de la variable core.fileMode
config):
opción de --chmod=(-|+)x
git actualización de índice (versión de bajo nivel de 'complemento git') para cambiar los permisos de ejecución en el índice, desde donde que sería recogido si se utiliza "git commit" (y no "git commit -a").
Se puede configurar de forma global:
git config --global core.filemode false
Si lo anterior no funciona para usted, la razón podría ser las sustituciones de configuración local de la configuración global.
Eliminar configuración local para que el efecto global de toma de configuración:
git config --unset core.filemode
Como alternativa, puede cambiar la configuración local para el valor correcto:
git config core.filemode false
Si ha utilizado chmod de comandos ya continuación, comprobar la diferencia de archivo, se muestra el modo de archivo anterior y el modo de archivo actual como por ejemplo:
Modo de nuevo: 755
Modo antigua: 644
Modo de edad conjunto de todos los archivos mediante el siguiente comando
sudo chmod 644 .
Ahora Set core.fileMode en false en el archivo de configuración, ya sea usando comandos o manualmente.
git config core.fileMode false
a continuación, aplicar comando chmod para cambiar los permisos de todos los archivos como
sudo chmod 755 .
y de nuevo conjunto core.fileMode true.
git config core.fileMode true
Para mejores prácticas no mantenemos core.fileMode falsa siempre.
Por definining los siguientes alias (en ~ / .gitconfig) puede fácilmente desactivar temporalmente el fileMode por comando git:
[alias]
nfm = "!f(){ git -c core.fileMode=false $@; };f"
Cuando este alias se antepone al comando git, los cambios de modo de archivo no se mostrará con los comandos que de otro modo les mostrase. Por ejemplo:
git nfm status
Si desea establecer fileMode en false en los archivos de configuración de forma recursiva (incluyendo submódulos):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
Solución sencilla:
Hit este simple comando en la carpeta de proyecto ( no va a eliminar sus cambios originales) ... un viaje de solo Eliminar cambios que había sido hecho , mientras que el cambio de permisos de carpeta proyecto
comando es el siguiente:
git config core.fileMode false
¿Por qué todo esto de archivos innecesarios se modifican: porque se han cambiado los permisos de carpeta de proyectos con commend sudo chmod -R 777 ./yourProjectFolder
¿cuándo vas a comprobar los cambios lo que no se hizo? que has encontrado, como a continuación durante el uso de git diff nombre de archivo
old mode 100644
new mode 100755
Esto funciona para mí:
find . -type f -exec chmod a-x {} \;
o hacia atrás, dependiendo de su sistema operativo
find . -type f -exec chmod a+x {} \;