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?

Author: VonC, 2009-10-17

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.

 3185
Author: Greg Hewgill,
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
 250
Author: yoda,
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
 117
Author: adrien,
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ą!
 67
Author: Sinan Eldem,
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").

 49
Author: Jakub Narębski,
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

 32
Author: Tyler Long,
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.

 17
Author: Kishor Vitekar,
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/'

 14
Author: dryobs,
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
 14
Author: Ville,
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

Tutaj wpisz opis obrazka

 1
Author: ngCourse,
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 {} \;
 1
Author: Martin Volek,
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