1000 Stimmen

Wie entferne ich Dateien mit der Aufschrift "alter Modus 100755 neuer Modus 100644" aus unstaged Änderungen in Git?

Aus irgendeinem Grund, wenn ich zunächst ein Pull aus dem Repository für ein Git-Projekt von mir, habe ich eine Menge Dateien in meiner Arbeitskopie, an denen keine erkennbaren Änderungen vorgenommen wurden, die aber immer wieder in meiner Datenbank auftauchen. unstaged changes Bereich.

Ich verwende Git Gui unter Windows XP, und wenn ich mir die Datei ansehe, um zu sehen, was sich geändert hat, erscheint eine Alles, was ich sehe, ist:

old mode 100755  
new mode 100644  

Weiß jemand, was das bedeutet?

Wie kann ich diese Dateien aus der Liste der unveröffentlichten Änderungen entfernen? (Es ist sehr ärgerlich, 100 Dateien durchgehen zu müssen, nur um die Dateien herauszusuchen, die ich kürzlich bearbeitet habe und übertragen möchte).

0 Stimmen

Für die vollständigen, blutigen Details, was core.filemode ist, siehe meine Antwort hier . Beachten Sie, dass jedes Git-Repository sein eigenes core.filemode Einstellung, die von Git zum Zeitpunkt der Erstellung des Repositorys festgelegt wurde; diese Einstellung ist angeblich die richtige für dieses eine Repository zu sein. Wenn er aus irgendeinem Grund falsch ist, können Sie ihn ändern.

1735voto

Amber Punkte 473552

Das sieht für mich nach Unix-Dateiberechtigungsmodi aus ( 755 = rwxr-xr-x , 644 = rw-r--r-- ) - der alte Modus enthielt das Flag +x (ausführbar), der neue Modus nicht.

Die Antworten auf diese msysgit-Ausgabe schlägt vor, core.filemode auf false zu setzen, um das Problem zu beheben:

git config core.filemode false

126voto

NovelX Punkte 1221

Einstellung core.filemode auf false zu setzen, funktioniert, aber stellen Sie sicher, dass die Einstellungen in ~/.gitconfig nicht von denjenigen in .git/config .

84voto

K. Symbol Punkte 2361

Dies geschieht normalerweise, wenn das Projektarchiv zwischen Windows- und Linux-/Unix-Rechnern geklont wird.

Sagen Sie Git einfach, dass es die Änderung des Dateimodus ignorieren soll. Hier sind mehrere Möglichkeiten, dies zu tun:

  1. Config NUR für das aktuelle Repo:

     git config core.filemode false
  2. Global konfigurieren:

     git config --global core.filemode false
  3. In ~/.gitconfig hinzufügen:

     [core]
          filemode = false

Wählen Sie einfach eine von ihnen aus.

60voto

Scott Willeke Punkte 8232

Ich bin auf dieses Problem gestoßen, als ich ein paar Mal ein Git-Repository mit Arbeitsdateien von einer alten Festplatte kopiert habe. Das Problem rührt daher, dass sich der Besitzer und die Berechtigungen von der alten Festplatte/dem alten Rechner auf die neue Festplatte geändert haben. Lange Rede, kurzer Sinn: Führen Sie die folgenden Befehle aus, um das Problem zu beheben ( dank dieser Superuser-Antwort ):

sudo chmod -R -x . # remove the executable bit from all files

Der erstgenannte Befehl löst die von git diff gemeldeten Unterschiede auf, nimmt Ihnen aber die Möglichkeit, die Verzeichnisse aufzulisten, also ls ./ scheitert mit ls: .: Permission denied . Um das zu beheben:

sudo chmod -R +X . # add the executable bit only for directories

Die schlechte Nachricht ist, dass, wenn Sie Dateien haben, die Sie ausführbar halten wollen, wie z. B. .sh Skripte, müssen Sie diese rückgängig machen. Das können Sie mit dem folgenden Befehl für jede Datei tun:

chmod +x ./build.sh # where build.sh is the file you want to make executable again

20voto

bkm Punkte 141

Ich habe das gleiche Problem. Und dies rettet mein Leben:

Dadurch werden alle Berechtigungen auf den Stand des Diffs zurückgesetzt, so dass Sie nur noch die von Ihnen vorgenommenen Änderungen an den Dateien haben.

https://gist.github.com/jtdp/5443498

git diff -p -R --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never  \
| git apply

Weitere Einzelheiten unter https://stackoverflow.com/a/4408378/450383

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X