Aus irgendeinem Grund habe ich beim ersten Abrufen aus dem Repository für ein Git-Projekt von mir eine Menge Dateien in meiner Arbeitskopie erhalten, an denen keine erkennbaren Änderungen vorgenommen wurden, die jedoch weiterhin in meinem unstaged changes
Bereich angezeigt werden.
Ich verwende Git Gui unter Windows XP und wenn ich in die Datei gehe, um zu sehen, was sich geändert hat. Ich sehe nur:
old mode 100755
new mode 100644
Weiß jemand was das bedeutet?
Wie kann ich diese Dateien aus meiner Liste der nicht bereitgestellten Änderungen entfernen? (Sehr ärgerlich, wenn ich Hunderte von Dateien durchgehen muss, nur um Dateien auszuwählen, die ich kürzlich bearbeitet habe und die ich festschreiben möchte).
git update-index --chmod=(+|-)x <path>
.git config --global ...
dieser Option können Sie die Option in Ihrer globalen Konfigurationsdatei festlegen.Die Einstellung
core.filemode
auf false funktioniert, aber stellen Sie sicher, dass die Einstellungen in~/.gitconfig
nicht von denen in überschrieben werden.git/config
.quelle
~/.gitconfig
Datei anzuwenden !git config --list --show-origin | sls filemode
oder unter Linuxgit config --list --show-origin | grep filemode
. Dies zeigt Ihnen, wo Sie die Anpassungen vornehmen müssen.Ich bin auf dieses Problem gestoßen, als ich ein paar Mal ein Git-Repo mit Arbeitsdateien von einer alten Festplatte kopiert habe. Das Problem ergibt sich aus der Tatsache, dass der Eigentümer und die Berechtigungen vom alten Laufwerk / Computer zum neuen geändert wurden. Das lange und kurze daran ist, die folgenden Befehle auszuführen, um die Dinge zu korrigieren ( dank dieser Superuser-Antwort ):
Der erstere Befehl löst tatsächlich die von git diff gemeldeten Unterschiede auf, widerruft jedoch Ihre Fähigkeit, die Verzeichnisse aufzulisten, und
ls ./
schlägt daher fehlls: .: Permission denied
. Um das zu beheben:Die schlechte Nachricht ist, dass Sie Dateien zurücksetzen müssen, die ausführbar bleiben sollen, z. B.
.sh
Skripte. Sie können dies mit dem folgenden Befehl für jede Datei tun:quelle
git config core.filemode
isttrue
, sonst werden Berechtigungsänderungen nicht erkannt. Ich musste auch den Git-Index nach jeder Änderung aktualisieren, um ihn aufzunehmen.Tritt normalerweise auf, wenn das Repo zwischen Windows- und Linux / Unix-Computern geklont wird.
Sagen Sie git einfach, dass es die Änderung des Dateimodus ignorieren soll. Es gibt verschiedene Möglichkeiten:
NUR für aktuelles Repo konfigurieren:
Global konfigurieren:
Fügen Sie in ~ / .gitconfig hinzu:
Wählen Sie einfach eine davon aus.
quelle
Anscheinend haben Sie einige Berechtigungen des Verzeichnisses geändert. Ich habe die folgenden Schritte ausgeführt, um es wiederherzustellen.
quelle
Sie können versuchen, git reset --hard HEAD, um das Repo auf den erwarteten Standardzustand zurückzusetzen.
quelle
git reset --hard HEAD
hat perfekt für mich funktioniert. dankeIch habe das gleiche Problem konfrontiert. Und das rettet mein Leben: https://gist.github.com/jtdp/5443498
quelle
Dies geschieht, wenn Sie ziehen und alle Dateien im Remote-Repository ausführbar waren. Wenn Sie sie wieder ausführbar machen, wird alles wieder normal.
Möglicherweise müssen Sie Folgendes tun:
stattdessen für Dateien, die nicht als ausführbare Datei festgelegt wurden und die aufgrund des obigen Vorgangs geändert wurden. Es gibt einen besseren Weg, dies zu tun, aber dies ist nur eine sehr schnelle und schmutzige Lösung.
quelle
Mit dem folgenden Befehl können Sie den Dateimodus wieder ändern.
git add --chmod=+x -- filename
Dann verpflichten Sie sich zur Niederlassung.quelle
Ich hatte nur die eine problematische Datei mit den geänderten Berechtigungen. Um es einzeln zurückzusetzen, habe ich es einfach manuell mit gelöscht
rm <file>
und dann eine Kaufabwicklung durchgeführt, um eine neue Kopie abzurufen.Zum Glück hatte ich es noch nicht inszeniert.
Wenn ich es getan hätte, hätte ich
git reset -- <file>
vor dem Laufen laufen könnengit checkout -- <file>
quelle
Ich bin gerade auf dieses Problem gestoßen, als ich meinen Zweig mit dem Master unterschied. Git gab einen 'Modus'-Fehler zurück, als ich erwartete, dass mein Zweig mit dem Master identisch ist. Ich habe das Problem behoben, indem ich die Datei gelöscht und dann den Master wieder zusammengeführt habe.
Zuerst habe ich den Diff ausgeführt:
Dies gab zurück:
Ich habe dann Folgendes ausgeführt, um das Problem zu beheben:
Danach wurden
git diff
keine Unterschiede zwischen my-branch und master zurückgegeben.quelle