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.

16voto

J Adam Rogers Punkte 725

Wenn Sie Git verwenden, können Sie in Visual Studio die Dateien .gitignore und .gitattributes automatisch generieren. Die automatisch generierte .getattributes-Datei enthält die folgende Zeile:

* text=auto

Diese Zeile befindet sich am Anfang der Datei. Wir mussten die Zeile nur auskommentieren, indem wir ein # vorangestellt haben. Danach funktionierte alles wie erwartet.

12voto

Gima Punkte 1752

Das Problem könnte sich auch aus unterschiedlichen Dateiberechtigungen Das war auch bei mir der Fall:

Frisch geklontes Repository (Windows, Cygwin):

$ git ls-tree HEAD
100755 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile

Bare Remote Repository (Linux):

$ git ls-tree HEAD
100644 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile

6voto

Dennis Punkte 7383

Ich wollte eine Antwort hinzufügen, die mehr auf das "Warum" abzielt, denn es gibt bereits eine gute Antwort darauf, wie man das Problem beheben kann.

Also, .gitattributes hat eine * text=auto Einstellung, die dieses Problem verursacht.

In meinem Fall hatten die Dateien im Master-Zweig von GitHub \r\n Endungen. Ich habe die Einstellungen des Repositorys so gewählt, dass sie mit \n Endungen. Ich weiß allerdings nicht, was Git überprüft. Es soll mit nativen Endungen auf meiner Linux-Box auschecken ( \n ), aber ich schätze, es hat die Datei mit \r\n Endungen. Git beschwert sich, weil es die ausgecheckten \r\n Endungen, die sich im Repository befanden, und warnt mich, dass es in \n Einstellungen. Daher sind die Dateien "zu ändern".

So verstehe ich das im Moment.

6voto

Adrian Punkte 179

Das gleiche Problem bei mir. Ich konnte mehrere Bilder mit demselben Namen sehen, wie "textField.png" und "textfield.png" im entfernten Git-Repository, aber nicht in meinem lokalen Repository. Ich konnte nur "textField.png" sehen, das im Code des Projekts nicht verwendet wurde.

Es stellte sich heraus, dass die meisten meiner Kollegen mit Ubuntu arbeiten und ext4 Dateisystem, während ich auf einem Mac APFS verwende.

Dank an Sam Elliott Antwort war die Lösung ganz einfach. Zuerst bat ich einen Kollegen auf Ubuntu, die überflüssigen Dateiversionen mit dem Großbuchstaben zu löschen, dann Commit und Push auf Remote.

Dann habe ich das Folgende ausgeführt:

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

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

Schließlich beschlossen wir, dass jeder Entwickler seine Git-Konfiguration ändern sollte, um zu verhindern, dass dies jemals wieder passiert:

# Local Git configuration
git config core.ignorecase true

oder

# Global Git configuration
git config --global core.ignorecase true

3voto

user2148301 Punkte 568

Ich hatte das gleiche Problem. Auch mit einem Mac. Als ich mir das Repository auf einem Linux-Rechner ansah, stellte ich fest, dass ich zwei Dateien hatte:

geoip.dat und GeoIP.dat

Ich habe die veraltete Version auf dem Linux-Rechner entfernt und das Repository erneut auf den Mac geklont. Ich war nicht in der Lage, aus meiner Kopie des Repositorys zu ziehen, zu übertragen, zu verbergen oder zu ziehen, wenn es Duplikate gab.

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