GIT/SourceTree Client: Es wurden keine Änderungen an dieser Datei erkannt, oder es handelt sich um eine Binärdatei (?)

Hallo zusammen

Da ist irgendein Problem mit dem Zeichensatz oder ein komisches unsichtbares Zeichen (???) drin. Seit ich die .json- sowie die .xml-Datei mit „Visual Studio Code“ bearbeitet habe, besteht das Problem. Beide Dateien stammen aus einer Angular-Anwendung und wurden ursprünglich mit den entsprechenden, dafür vorgesehenen Tools kreiert.

Nun findet man im Netz praktisch überall das: Man solle eine Datei .gitattributes erstellen, welche folgenden Inhalt aufweist:


*.json diff

*.xml diff

…das Ganze scheint meines Erachtens aber eher ne Farce zu sein: Weder vor dem Commit/Push noch danach verändert sich was. Die beiden Datei werden immer noch mit der gleichen Begründung als verändert angesehen: Also immer noch "Es wurden keine Änderungen an dieser Datei erkannt, oder es handelt sich um eine Binärdatei"

Man muss ich mal den ersten Teil des Satz’ durch den Kopf gehen lassen: " Es wurden keine Änderungen an dieser Datei erkannt … "

Na, wenn das wirklich zutrifft, dann soll das doofe GIT doch die Klappe halten! :wink:

Und wieso sollte es nicht in der Lage sein, zusätzlich Unterschiede in Binärdateien zu erkennen. Ich meine das sei relativ trivial, base64-codieren und dann ein gewöhnlicher Stringvergleich.

Solche ein „hoch subtiles“ (na ja?!?) Produkt ist nicht in der Lage sowas zu bewerkstelligen. Hmmm…?

Evtl. kennt jemand das Problem und wüsste was dazu? Vielen Dank für die Feedbacks.

Kennen tu’ ich das Problem nicht, aber … um erstmal zu klären, was eigentlich das Problem ist:

Die beiden Datei werden immer noch mit der gleichen Begründung als verändert angesehen

Es wurden keine Änderungen an dieser Datei erkannt

Nimmt Git sie nun als verändert wahr, oder nicht?

(Erstmal sind es ja keine Binärdateien (und eigentlich erkennt Git auch Unterschiede in Binärdateien). Es könnte sein, dass sie einfach in einem anderen Zeichensatz gespeichert sind, aber mit den Details, was das bedeutet, kenn’ ich micht nicht sooo aus … (Zu meiner Zeit hatten wir noch das gute alte ASCII, und nicht diesen neumodischen UTF-8-Shyce… :older_man: ))

Ich würde fast noch fragen, ob du die Dateien irgendwie („in beiden Versionen“) bereitstellen könntest, aber egal, wie du das machst: Wenn es von dem Tool abhängt, mit dem man sie bearbeitet, könnte es schwer werden, den Fehler zu reproduzieren - (Hex-Editor und los :smiley: ).

In deinem angular Projekt gibt es eine Datei mit dem Name .editorconfig. Da steht sowas drin:

[*]
charset = utf-8

Heißt alle Dateien sind UTF-8 codiert. Wenn du jetzt das gesamte Projekt in einem Editor öffnest, der editorconfig versteht, wird dieser sich daran halten und UTF-8 zum Speichern verwenden. VS Code versteht es nicht out of the box, dazu bräuchte man ein Plugin. Ich geh mal davon aus, dass du unter Windows arbeitest, da ist ja das Default Charset CP-1252 und in diesem Format speichert auch VS Code. Wenn du nicht das Plugin installieren willst, kannst du auch das Default Encoding von VS Code ändern. Such dazu mal in den Settings nach „Encoding“

Aber git hat recht, es hat sich binär was geändert, aber sehen kann man nichts.

Vielen Dank, werde mal schauen.

Eclipse unter Win verwendet per default auch nicht UTF-8, sondern dieses Windows-„Zeugs“… das erste was ich dort mache ist immer auf UTF-8 umzustellen.

Vielleicht gibt’s ja so ne Option auch bei Visual Studio Code, damit wär das Problem bei der Wurzel behoben…

Kenne das Problem auch. Git stellt Änderungen fest, es sind in der diff aber keine Zeilen sichtbar. Ein anderes diff Tool brachte dann die Erkenntnis: Zeichensatz geändert. Das kann auch unter Linux passieren.

Neben dem Encoding ist ein weiterer heißer Kandidat für die Ursache des Problems der Unterschied zwischen den Line-Endings (CR vs. CRLF). Git bietet da ein paar Optionen, auch was mit „Check es ‚so‘ aus, aber check es ‚anders‘ ein“ - und irgendwie ist’s oft genau so, wie man’s macht, verkehrt…

Ja, auch bei mir scheint es genau in diese Richtung zu gehen. Habe jetzt einfach „Verwerfen“ im SourceTree angeklickt und gut ist. (Vorher aber mit WinMerge geprüft, „gegen aussen“ null Unterschied)