2012-04-29 8 views
9

Wydaje Git ignoruje ~/.gitconfigGit ignoring gitconfig?

$ git config --global core.filemode false 

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

Więc teraz są 2 wejścia dla core.filemode i git nadal nie ignorując FileMode zmienia

$ 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 

podstawie torek’s answer dodałem tę linię do mojego .bash_profile

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

Odpowiedz

2

Może to trochę przesada, ale w Cygwin to przeszkadza mi wystarczy kopać w tej kwestii więcej. Kiedy git jest budowany z kodu źródłowego, sprawdza system plików, na którym jest zbudowany, aby sprawdzić, czy rozumie pliki wykonywalne.

Poszedłem i zbudowałem git ze źródła na moim systemie Cygwin i zainstalowałem go w lokalnym katalogu, a następnie dodałem plik binarny do mojej ścieżki. Podstawowe kroki są:

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 

Następnie dodać coś takiego do .bashrc:

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

oczywiście, że budowa nie będzie działać, chyba że masz wszystkie zależności kompilacji zainstalowanych w Cygwin. Z niewielkim szumem mogłem zrobić to bez większych problemów. Teraz git init i git clone w tym systemie domyślnie plik filemode na false. Sztuką jest zdefiniowanie NO_TRUSTABLE_FILEMODE dla kompilacji.

15

Podczas tworzenia lub reinicjowania nowego repo, git init zawsze ustawia nową wartość dla core.filemode na podstawie wyniku sondowania systemu plików. Będziesz po prostu trzeba ręcznie:

git config core.filemode false 

czyli

git config --unset core.filemode 

aby szanować jeden w ~/.gitconfig. Jeśli ponownie uruchomisz git init , ustawienia per-repo powrócą do true w twoim systemie.

+3

Nie do końca pewna, w jaki sposób git faktycznie je implementuje. Musiałbym zagłębić się w kod źródłowy. Ach, jest: zależy od elementu konfiguracyjnego git-time 'NO_TRUSTABLE_FILEMODE'. Jeśli to nie jest zdefiniowane, to testuje w czasie wykonywania przez chmod-ing '.git/config', który ostatecznie zastępuje' .git/config.lock', który usuwa jego tymczasowy chmod. Wersja tymczasowa ma ustawiony bit U + X; jeśli pozostanie ustawione po chmod, git uważa, że ​​bit x ma znaczenie. – torek

+0

to ma sens, ale mimo to jest frustrujące, musiałem skopiować projekt z jednego komputera na drugi 5 razy, dopóki nie zorientowałem się, co się dzieje)) dzięki! –

+1

Dzięki, wiem, że 'git config --global core.fileMode false' jest bezużyteczny. git problem fileMode Spotkałem go każdego dnia.Musiałem to konfigurować za każdym razem, gdy tworzę nowy projekt. –

0

(EDIT), tak, aby wznowić, na oknach musimy zrobić:

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

I można utworzyć pusty plik konfiguracyjny w Git zainstalować reż nowych folderów git (startowych):

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

I umieścić wewnątrz:

[core] 
filemode = false 
+0

zaktualizowano szablonem do naprawy git init – Tanguy

+0

Nawet z twoją zmianą, 'git init' nadal będzie zwracał' filemode = true' –

Powiązane problemy