Pytanie Jak zmienić Git ignoruje tryb pliku (chmod)?
Mam projekt, w którym muszę zmienić tryb plików chmod
do 777 podczas opracowywania, ale które nie powinny się zmienić w głównym repo.
Git odbiera chmod -R 777 .
i oznacza wszystkie pliki jako zmienione. Czy istnieje sposób, aby Git ignorował zmiany trybu, które zostały wprowadzone do plików?
1891
2017-10-16 21:43
pochodzenie
Odpowiedzi:
Próbować:
git config core.fileMode false
Od git-config (1):
core.fileMode
If false, the executable bit differences between the index and the
working copy are ignored; useful on broken filesystems like FAT.
See git-update-index(1). True by default.
The -c
flaga może być użyta do ustawienia tej opcji dla jednorazowych poleceń:
git -c core.fileMode=false diff
I --global
flaga sprawi, że będzie domyślnym zachowaniem zalogowanego użytkownika.
git config --global core.fileMode false
Ostrzeżenie
core.fileMode
nie jest najlepszą praktyką i należy go stosować ostrożnie. To ustawienie obejmuje tylko wykonywalny bit trybu i nigdy bity do odczytu / zapisu. W wielu przypadkach wydaje ci się, że potrzebujesz tego ustawienia, ponieważ zrobiłeś coś takiego chmod -R 777
, czyniąc wszystkie pliki wykonywalne. Ale w większości projektów większość plików nie jest potrzebna i nie powinna być wykonywalna ze względów bezpieczeństwa.
Właściwym sposobem rozwiązania tego problemu jest osobne przetwarzanie plików i folderów, z czymś takim jak:
find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \; # Make files read/write
Jeśli to zrobisz, nigdy nie będziesz musiał użyć core.fileMode
, z wyjątkiem bardzo rzadkich środowisk.
3117
2017-10-16 21:53
zmiana trybu cofania w drzewie roboczym:
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
Lub w 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
247
2018-01-18 02:20
Jeśli chcesz ustawić tę opcję dla wszystkich swoich repozytoriów, użyj --global
opcja.
git config --global core.filemode false
Jeśli to nie zadziała, prawdopodobnie używasz nowszej wersji git, więc spróbuj --add
opcja.
git config --add --global core.filemode false
Jeśli uruchomisz go bez opcji --global, a twój katalog roboczy nie jest repozytorium, dostaniesz
error: could not lock config file .git/config: No such file or directory
115
2018-04-21 12:00
Gdyby
git config --global core.filemode false
nie działa dla ciebie, rób to ręcznie:
cd into yourLovelyProject folder
cd do folderu .git:
cd .git
edytuj plik konfiguracyjny:
nano config
zmień wartość true na false
[core]
repositoryformatversion = 0
filemode = true
->
[core]
repositoryformatversion = 0
filemode = false
zapisz, wyjdź, przejdź do wyższego folderu:
cd ..
reinicjuj git
git init
gotowe!
66
2017-08-06 13:10
Dodanie do Greg Hewgill odpowiedział (używanie core.fileMode
zmienna config):
Możesz użyć --chmod=(-|+)x
opcja git update-index (niskopoziomowa wersja "git add") zmieniająca uprawnienia wykonywania w indeksie, skąd zostanie pobrana, jeśli użyjesz "git commit" (a nie "git commit -a").
48
2017-10-16 22:03
Możesz skonfigurować go globalnie:
git config --global core.filemode false
Jeśli powyższe nie działa, przyczyną może być to, że lokalna konfiguracja przesłania globalną konfigurację.
Usuń lokalną konfigurację, aby globalna konfiguracja zaczęła działać:
git config --unset core.filemode
Alternatywnie możesz zmienić konfigurację lokalną na właściwą wartość:
git config core.filemode false
32
2018-01-21 09:12
Jeśli użyłeś chmod polecenie już wtedy sprawdź różnicę pliku, Pokazuje poprzedni tryb pliku i bieżący tryb pliku, taki jak:
nowy tryb: 755
stary tryb: 644
ustawić stary tryb wszystkich plików za pomocą poniższego polecenia
sudo chmod 644 .
teraz ustaw core.fileMode na false w pliku konfiguracyjnym za pomocą komendy lub ręcznie.
git config core.fileMode false
następnie użyj polecenia chmod, aby zmienić uprawnienia wszystkich plików, takich jak
sudo chmod 755 .
i ponownie ustaw core.fileMode na true.
git config core.fileMode true
Aby uzyskać najlepsze praktyki, nie należy zawsze przechowywać wartości core.fileMode.
16
2017-10-13 07:34
Jeśli chcesz, aby plik plikowy był rekursywnie rekompensowany (w tym podmoduły):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
14
2017-07-16 12:23
Definiując następujący alias (in ~ / .gitconfig) możesz łatwo tymczasowo wyłączyć komendę fileMode per git:
nfm = "!f(){ git -c core.fileMode=false $@; };f"
Kiedy ten alias jest poprzedzony komendą git, zmiany trybu pliku nie pojawią się z poleceniami, które w przeciwnym razie byłyby wyświetlane. Na przykład:
git nfm status
14
2017-07-24 15:01
Proste rozwiązanie:
Uderz w to Proste pochwały w folderze projektu (nie usunie twoich pierwotnych zmian) ... to tylko usuń zmiany co było Gotowe podczas gdy się zmieniłeś uprawnienie do folderu projektu
pochwała jest poniżej:
git config core.fileMode false
Dlaczego ten niepotrzebny plik jest modyfikowany:
ponieważ zmieniłeś uprawnienia do folderu projektu
z wyróżnieniem
sudo chmod -R 777 ./yourProjectFolder
kiedy sprawdzisz zmiany, czego nie zrobiłeś?
znalazłeś jak poniżej podczas korzystania git nazwa pliku diff

1
2018-03-19 13:13
To działa dla mnie:
find . -type f -exec chmod a-x {} \;
lub wstecz, w zależności od systemu operacyjnego
find . -type f -exec chmod a+x {} \;
0
2018-04-30 15:06