Frage Wie mache ich Git Änderungen des Dateimodus (chmod) Änderungen?


Ich habe ein Projekt, in dem ich den Modus von Dateien mit ändern muss chmod bis 777 während der Entwicklung, die sich aber im Hauptrepo nicht ändern sollte.

Git geht weiter chmod -R 777 . und markiert alle Dateien als geändert. Gibt es eine Möglichkeit, Git-Modus-Änderungen, die an Dateien vorgenommen wurden, zu ignorieren?


1882
2017-10-16 21:43


Ursprung


Antworten:


Versuchen:

git config core.fileMode false

Von Git-Konfig (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.

Das -c Flag kann verwendet werden, um diese Option für einmalige Befehle zu setzen:

git -c core.fileMode=false diff

Und das --global Mit dem Flag wird das Standardverhalten für den angemeldeten Benutzer festgelegt.

git config --global core.fileMode false

Warnung

core.fileMode ist nicht die beste Praxis und sollte vorsichtig verwendet werden. Diese Einstellung deckt nur das ausführbare Bit des Modus und niemals die Lese / Schreib-Bits ab. In vielen Fällen denken Sie, dass Sie diese Einstellung brauchen, weil Sie so etwas gemacht haben chmod -R 777, um alle Ihre Dateien ausführbar zu machen. Aber in den meisten Projekten Die meisten Dateien benötigen keine und sollten aus Sicherheitsgründen nicht ausführbar sein.

Der richtige Weg, um diese Art von Situation zu lösen, ist die getrennte Behandlung von Ordner- und Datei-Berechtigungen.

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

Wenn Sie das tun, müssen Sie nie verwenden core.fileMode, außer in sehr seltenen Umgebungen.


3109
2017-10-16 21:53



Moduswechsel im Arbeitsbaum rückgängig machen:

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

Oder in 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

246
2018-01-18 02:20



Wenn Sie diese Option für alle Ihre Repos festlegen möchten, verwenden Sie die --global Möglichkeit.

git config --global core.filemode false

Wenn dies nicht funktioniert, verwenden Sie wahrscheinlich eine neuere Version von git --add Möglichkeit.

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

Wenn Sie es ohne die Option --global ausführen und Ihr Arbeitsverzeichnis kein Repo ist, erhalten Sie

error: could not lock config file .git/config: No such file or directory

115
2018-04-21 12:00



Ob

git config --global core.filemode false

funktioniert nicht für dich, mach es manuell:

cd into yourLovelyProject folder

CD in den .git-Ordner:

cd .git

bearbeite die Konfigurationsdatei:

nano config

ändere wahr zu falsch

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

speichern, beenden, zum übergeordneten Ordner wechseln:

cd ..

reinige den git

git init

du bist fertig!


66
2017-08-06 13:10



Hinzufügen zu Greg Hewgill antwortet (vom Benutzen core.fileMode Konfigurationsvariable):

Sie können verwenden --chmod=(-|+)x Option von Git Update-Index (Low-Level-Version von "git add"), um die Ausführungsberechtigungen im Index zu ändern, von wo aus er aufgerufen würde, wenn Sie "git commit" (und nicht "git commit -a") verwenden.


48
2017-10-16 22:03



Sie können es global konfigurieren:

git config --global core.filemode false

Wenn das oben genannte nicht für Sie funktioniert, hat die lokale Konfiguration möglicherweise Vorrang vor der globalen Konfiguration.

Entfernen Sie Ihre lokale Konfiguration, damit die globale Konfiguration wirksam wird:

git config --unset core.filemode

Alternativ können Sie Ihre lokale Konfiguration auf den richtigen Wert ändern:

git config core.filemode false


32
2018-01-21 09:12



Wenn du benutzt hast chmod Befehl bereits dann überprüfen Sie den Unterschied der Datei, Es zeigt vorherige Datei-Modus und aktuelle Datei-Modus wie:

neuer Modus: 755

alter Modus: 644

Stellen Sie den alten Modus aller Dateien mit dem Befehl unten ein

sudo chmod 644 .

Setzen Sie nun core.fileMode in der Konfigurationsdatei auf false, entweder mit dem Befehl oder manuell.

git config core.fileMode false

Wenden Sie dann den Befehl chmod an, um die Berechtigungen aller Dateien wie z

sudo chmod 755 .

und setzen Sie core.fileMode erneut auf true.

git config core.fileMode true

Für Best Practices halten Sie core.fileMode nicht immer auf false.


15
2017-10-13 07:34