Jak wprowadzić zmiany w GIT ignore file mode (chmod)?
Mam projekt, w którym muszę zmienić tryb plików z chmod
Na 777 podczas tworzenia, ale który nie powinien się zmieniać w głównym repo.
Git pobiera chmod -R 777 .
i zaznacza wszystkie pliki jako zmienione. Czy istnieje sposób, aby Git ignorować zmiany trybu, które zostały wprowadzone do plików?
11 answers
Spróbuj:
git config core.fileMode false
From 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.
Znacznik -c
może być użyty do Ustawienia tej opcji dla poleceń jednorazowych:
git -c core.fileMode=false diff
I flaga --global
sprawią, że będzie to domyślne zachowanie zalogowanego użytkownika.
git config --global core.fileMode false
Ostrzeżenie
core.fileMode
nie jest to najlepsza praktyka i powinna być stosowana ostrożnie. To ustawienie obejmuje tylko wykonywalny bit trybu i nigdy bitów odczytu/zapisu. W wielu przypadkach wydaje ci się, że potrzebujesz tego ustawienia ponieważ zrobiłeś coś w stylu chmod -R 777
, sprawiając, że wszystkie Twoje pliki są wykonywalne. Jednak w większości projektów większość plików nie potrzebuje i nie powinna być wykonywalna ze względów bezpieczeństwa .
Właściwym sposobem na rozwiązanie tego typu sytuacji jest oddzielna obsługa uprawnień do folderów i plików za pomocą czegoś w rodzaju:
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żywać core.fileMode
, z wyjątkiem bardzo rzadkiego środowiska.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 06:21:21
Cofnij zmianę trybu 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-16 14:58:42
Jeśli chcesz ustawić tę opcję dla wszystkich transakcji repo, użyj opcji --global
.
git config --global core.filemode false
Jeśli to nie działa, prawdopodobnie używasz nowszej wersji Gita, więc wypróbuj opcję --add
.
git config --add --global core.filemode false
Jeśli uruchomisz go bez opcji -- global, a twój katalog roboczy nie jest repo, otrzymasz
error: could not lock config file .git/config: No such file or directory
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-19 20:12:00
If
git config --global core.filemode false
Nie działa dla ciebie, zrób to ręcznie:
cd into yourLovelyProject folder
CD do .folder git:
cd .git
Edycja pliku konfiguracyjnego:
nano config
Zmień true NA false
[core]
repositoryformatversion = 0
filemode = true
->
[core]
repositoryformatversion = 0
filemode = false
Zapisz, wyjdź, przejdź do górnego folderu:
cd ..
Reinit the git
git init
Koniec z Tobą!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-06 13:10:33
Dodanie do Greg hewgill odpowiedź (o użyciu core.fileMode
zmiennej config):
Możesz użyć --chmod=(-|+)x
opcji git update-index (niskopoziomowa wersja "git add"), aby zmienić uprawnienia wykonawcze w indeksie, skąd zostaną pobrane, jeśli użyjesz "git commit" (a nie "git commit-a").
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:32
Możesz skonfigurować go globalnie:
git config --global core.filemode false
Jeśli powyższe nie działa dla ciebie, powodem może być to, że Twoja konfiguracja lokalna nadpisuje konfigurację globalną.
Usuń konfigurację lokalną, aby Konfiguracja globalna stała się skuteczna:
git config --unset core.filemode
Alternatywnie możesz zmienić lokalną konfigurację na odpowiednią wartość:
git config core.filemode false
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-21 09:12:25
Jeśli Użyłeś już chmod to sprawdź różnicę w pliku, pokazuje poprzedni tryb pliku i bieżący tryb pliku, taki jak:
Nowy tryb: 755
Stary tryb: 644
Ustaw stary tryb wszystkich plików używając poniższego polecenia
sudo chmod 644 .
Teraz ustawić rdzeń.fileMode do false w pliku konfiguracyjnym albo za pomocą polecenia albo ręcznie.
git config core.fileMode false
Następnie zastosuj polecenie chmod, aby zmienić uprawnienia wszystkich plików, takich jak
sudo chmod 755 .
I jeszcze raz ustawić rdzeń.fileMode do true.
git config core.fileMode true
Dla najlepszych praktyk nie trzymać rdzenia.fileMode false zawsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 07:34:57
Jeśli chcesz ustawić filemode na false w plikach konfiguracyjnych rekurencyjnie (łącznie z modułami podrzędnymi) :
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-16 12:23:45
Definiując następujący alias (w ~/.gitconfig) możesz łatwo tymczasowo wyłączyć kod pliku dla polecenia git:
nfm = "!f(){ git -c core.fileMode=false $@; };f"
Gdy alias jest poprzedzony komendą git, zmiany trybu pliku nie będą wyświetlane z poleceniami, które w przeciwnym razie by je pokazywały. Na przykład:
git nfm status
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-24 15:01:35
Proste rozwiązanie:
Naciśnij to proste polecenie w folderze projektu ( nie usunie oryginalnych zmian) ... usunie tylko to, co zostało zrobione gdy zmieniłeś uprawnienia do folderu projektu
pochwała znajduje się poniżej:
Git Config core.fileMode false
Dlaczego ten niepotrzebny plik jest modyfikowany: ponieważ zmieniono uprawnienia folderu projektu z pochwała Sudo chmod-R 777 ./ yourProjectFolder
Kiedy sprawdzisz zmiany czego nie zrobiłeś? znajdziesz jak poniżej używając git diff filename
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 13:13:57
To działa dla mnie:
find . -type f -exec chmod a-x {} \;
Lub odwrotnie, w zależności od systemu operacyjnego
find . -type f -exec chmod a+x {} \;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-30 15:06:11