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?

¿Fue útil?

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 {} \;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top