2012-04-29 10 views
9

Parece Git está ignorando ~/.gitconfigGit ignorando gitconfig?

$ git config --global core.filemode false 

$ git config -l 
core.filemode=false 
core.filemode=true 

Así que ahora hay 2 entradas para core.filemode y git todavía no está ignorando cambia fileMode

$ touch modetest 

$ git add . 

$ git commit -m test1 
[master (root-commit) 320cfe4] test1 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 modetest 

$ chmod +x modetest 

$ git diff 
diff --git a/modetest b/modetest 
old mode 100644 
new mode 100755 

Basado en torek’s answer, añadí esta línea a mi .bash_profile

[ -d .git ] && git config core.filemode false 

Respuesta

2

Tal vez un poco exagerado, pero en este Cygwin me molestó lo suficiente como para profundizar en el tema más. Cuando git se crea a partir del código fuente, comprueba el sistema de archivos en el que está construido para ver si comprende los bits ejecutables.

Seguí adelante y construí git desde la fuente en mi sistema Cygwin y lo instalé en un directorio local, luego agregué el binario a mi ruta. Los pasos básicos son:

cd ~/ 
mkdir git 
cd git 
mkdir inst 
git clone -c core.autocrlf=false https://github.com/git/git.git 
cd git 
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ 
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ install 

A continuación, añadir algo como esto para .bashrc:

export PATH=/home/[username]/git/inst/bin:$PATH 

Por supuesto, que la acumulación no funcionará a menos que tenga todas las dependencias de construcción instalados en Cygwin. Con un poco de hurgar, pude hacerlo sin demasiados problemas. Ahora git init y git clone en ese sistema predeterminan filemode a false. El truco es definir NO_TRUSTABLE_FILEMODE para la compilación.

15

Al crear o reiniciar un nuevo repositorio, git init siempre establece un nuevo valor para core.filemode según el resultado de probar el sistema de archivos. Usted sólo tiene que manualmente :

git config core.filemode false 

O:

git config --unset core.filemode 

para hacerlo respetar el uno en su ~/.gitconfig. Si ejecuta git init otra vez , la configuración por reposición volverá al true en su sistema.

+3

No estoy del todo seguro de cómo lo implementa realmente. Tendría que profundizar en el código fuente. Ah, ahí está: depende del elemento de configuración de tiempo de compilación git 'NO_TRUSTABLE_FILEMODE'. Si eso no está definido, entonces lo prueba en tiempo de ejecución mediante chmod-ing '.git/config' que eventualmente reemplaza con' .git/config.lock' que borra su chmod temporal. La versión temporal tiene el conjunto de u + x bits; si permanece configurado después de chmod, git cree que el bit x es importante. – torek

+0

esto tiene mucho sentido, pero no obstante es frustrante, tuve que copiar un proyecto de una computadora a otra 5 veces hasta que me di cuenta de lo que estaba pasando)) ¡gracias! –

+1

Gracias, sé que 'git config --global core.fileMode false' es inútil. git fileMode problema Lo había encontrado todos los días.Tenía que configurar eso cada vez que creaba un nuevo proyecto. –

0

(EDIT) para reanudar, en las ventanas que tenemos que hacer:

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

Además, puede crear un archivo de configuración vacío en Git directorio instalación de nuevas carpetas GIT (init):

C:\bin\Git\share\git-core\templates>echo > config 
C:\bin\Git\share\git-core\templates>notepad config 

Y poner dentro:

[core] 
filemode = false 
+0

actualizado con una plantilla para arreglar git init – Tanguy

+0

Incluso con su edición, 'git init' todavía devolverá' filemode = true' –

Cuestiones relacionadas