Problem: Git interpretiert eine ganze C#-Datei als geändert, nachdem Dateiänderungen lokal gespeichert wurden. Es zeigt an, dass sich Zeilenenden geändert haben, obwohl sie als CRLF-Endungen ausgecheckt und lokal mit CRLF-Zeilenenden gespeichert wurden.
Ich arbeite in meinem Job an einem Visual Studio-Projekt, das mehrere Mitwirkende hat. Ich verwende Visual Studio 2012. In den letzten 2 Tagen hatten ein anderer Kollege und ich das obige Problem, nachdem wir das Repo von unserer Unternehmens-Stash-Site geklont hatten. Wir können unsere Änderungen nicht festschreiben, da Git anzeigt, dass sich die gesamte Datei geändert hat und einige unserer Dateien Tausende von Zeilen lang sind. Hier ist mehr Kontext zu den Symptomen:
- Das Problem tritt nur bei einigen Dateien auf, nicht bei allen.
- Das Problem ist nicht spezifisch für Visual Studio. Ich habe die Datei in IntelliJ und Notepad++ bearbeitet und das gleiche Problem festgestellt
- Nachdem die Datei geändert wurde, habe ich extreme Schwierigkeiten, Änderungen zu verwerfen und die Datei aus dem Repo auszuchecken. Ich habe versucht, mehrere Befehle auszuführen, die mein lokales Repo zurücksetzen sollten. Manchmal funktionieren sie und ich bin mit dem Ursprung verbunden, manchmal nicht. Die einzig konsistente Lösung besteht darin, einen neuen Zweig auszuchecken, die Änderungen dort festzuschreiben und zurück zum Zielzweig zu wechseln. Ich habe die folgenden Methoden ausprobiert, um Änderungen zu verwerfen:
git checkout --
git reset --hard
git reset HEAD
git stash
Hier ist eine Liste der Schritte, die ich unternommen habe, um das Problem zu beheben:
- Zeilenende-Normalisierung, wie dokumentiert hier
- Ändern meiner Git-Konfiguration in
autocrlf=true
undautocrlf=false.
Dies ist hier dokumentiert. Das Problem bleibt bei beiden Einstellungen bestehen - Ändern der .gitattributes-Einstellungen im Projekt. Das Folgende sind meine aktuellen Einstellungen, die dem im obigen Link angegebenen Beispiel entsprechen
* text=auto
*.cs text
- Git deinstallieren und neu installieren (zweimal)
Nichts, was ich bisher getan habe, hat das Problem behoben. Meine Vermutung ist, dass es mit den Einstellungen in der .gitattributes-Datei zusammenhängt. Allerdings hat niemand sonst, einschließlich des Hauptentwicklers des Projekts, diese Probleme beim Klonen des Repos erlebt. Ich würde mich sehr über Anregungen freuen. Vielen Dank!
Haben Sie eine Lösung gefunden? Ich übertrage in VS und erhalte ausstehende Änderungen in Linux und umgekehrt in einer Schleife. Bringt mich dazu, jemanden töten zu wollen.
– Stefano d’Antonio
11. Juli 2015 um 11:58 Uhr