262 Stimmen

Dateien, die direkt nach einem Git-Klon als geändert angezeigt werden

Ich habe gerade ein Problem mit einem Repository, und obwohl ich normalerweise gut mit Git umgehen kann, scheine ich dieses Problem nicht lösen zu können.

Wenn ich dieses Repository klone, dann cd in das Repository, git status zeigt mehrere Dateien als geändert an. Hinweis: Ich habe das Repository nicht in einem Editor oder ähnlichem geöffnet.

Ich habe versucht, diese Anleitung zu befolgen: http://help.github.com/dealing-with-lineendings/ aber das hat bei meinem Problem überhaupt nicht geholfen.

Ich habe versucht git checkout -- . viele Male, aber es scheint nichts zu bewirken.

Ich arbeite mit einem Mac, und im Repository selbst gibt es keine Submodule.

Das Dateisystem ist ein "Journaled HFS+" Dateisystem auf dem Mac und unterscheidet nicht zwischen Groß- und Kleinschreibung. Die Dateien sind einzeilig und jeweils etwa 79 KB groß (ja, Sie haben richtig gehört), so dass ein Blick auf git diff ist nicht besonders hilfreich. Ich habe gehört, dass man git config --global core.trustctime false Das werde ich ausprobieren, sobald ich wieder an meinem Computer mit dem Repository bin.

Ich habe Details des Dateisystems mit Fakten geändert! Und ich versuchte die git config --global core.trustctime false Trick, der nicht sehr gut funktioniert hat.

153voto

adnans Punkte 2239

Ich hatte das gleiche Problem auf dem Mac, nachdem ich ein Repository geklont hatte. Es wurde angenommen, dass alle Dateien geändert worden waren.

Nach der Ausführung git config --global core.autocrlf input markierte es immer noch alle Dateien als geändert. Auf der Suche nach einer Lösung stieß ich auf .gitattributes Datei im Home-Verzeichnis, die folgendes enthielt.

* text=auto

Ich habe es auskommentiert und alle anderen geklonten Repositories funktionierten von nun an einwandfrei.

101voto

Piotr Korlaga Punkte 2959
git config core.fileMode false

löste dieses Problem in meinem Fall

https://git-scm.com/docs/git-config

TL;DR;

core.fileMode

Wenn false, werden die ausführbaren Bitunterschiede zwischen dem Index und dem Arbeitsbaum ignoriert; nützlich bei defekten Dateisystemen wie FAT. Siehe git-update-index(1).

Die Voreinstellung ist true, außer git-clone(1) oder git-init(1) prüfen und setzen core.fileMode false, wenn dies bei der Erstellung des Repositorys angebracht ist.

96voto

Sam Elliott Punkte 3760

Ich habe sie. Alle anderen Entwickler arbeiten mit Ubuntu (glaube ich) und haben daher Dateisysteme, die Groß- und Kleinschreibung unterscheiden. Ich jedoch nicht (da ich einen Mac verwende). In der Tat hatten alle Dateien Kleinbuchstaben, als ich sie mir mit git ls-tree HEAD <path> .

Ich werde einen von ihnen bitten, das zu klären.

59voto

Arrowmaster Punkte 8957

Ich nehme an, Sie verwenden Windows. Die GitHub-Seite, die Sie verlinkt haben, enthält die Details verkehrt herum. Das Problem ist, dass CR + LF Zeilenenden bereits in das Repository übertragen wurden und weil Sie core.autocrlf entweder auf wahr o Eingabe will Git die Zeilenenden in LF umwandeln, also git status zeigt, dass jede Datei geändert wird.

Wenn es sich um ein Repository handelt, auf das Sie nur zugreifen möchten, mit dem Sie aber nichts zu tun haben, können Sie den folgenden Befehl ausführen, um das Problem lediglich zu verbergen, ohne es tatsächlich zu lösen.

git config core.autocrlf false

Wenn es sich um ein Repository handelt, an dem Sie aktiv beteiligt sind und Änderungen vornehmen können. Sie können das Problem beheben, indem Sie eine Übergabe vornehmen, die alle Zeilenenden im Projektarchiv so ändert, dass LF statt CR + LF verwendet wird, und dann Maßnahmen ergreifen, um zu verhindern, dass das Problem in Zukunft erneut auftritt.

Die folgenden Angaben stammen direkt aus der gitattributes man-Seite und sollte in einem sauberen Arbeitsverzeichnis durchgeführt werden.

echo "* text=auto" >>.gitattributes
rm .git/index     # Remove the index to force Git to
git reset         # re-scan the working directory.
git status        # Show files that will be normalized.
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"

Wenn Dateien, die nicht normalisiert werden sollten, in git status zu verwenden, heben Sie deren Textattribut auf, bevor Sie git add -u .

manual.pdf      -text

Umgekehrt kann bei Textdateien, die Git nicht erkennt, die Normalisierung manuell aktiviert werden.

weirdchars.txt  text

46voto

kds Punkte 27579

Bitte führen Sie die folgenden Befehle aus. Das könnte das Problem lösen.

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

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