Wie man prüft, ob eine Datei in Git binär ist

GitGitBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie feststellen können, ob eine Datei von Git als binär angesehen wird. Wir werden zwei Methoden untersuchen: die Verwendung des Befehls git diff --numstat, um zu beobachten, wie Git Änderungen zusammenfasst, und die Nutzung des Standard-Linux-Befehls file, um den Dateityp zu identifizieren. Am Ende dieses Labs verstehen Sie, wie Git zwischen Text- und Binärdateien unterscheidet und wie Sie diese Unterscheidung selbst überprüfen können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") subgraph Lab Skills git/add -.-> lab-560025{{"Wie man prüft, ob eine Datei in Git binär ist"}} git/status -.-> lab-560025{{"Wie man prüft, ob eine Datei in Git binär ist"}} git/diff -.-> lab-560025{{"Wie man prüft, ob eine Datei in Git binär ist"}} end

Verwendung von git diff --numstat zur Überprüfung

In diesem Schritt werden wir untersuchen, wie Sie git diff --numstat verwenden können, um die Änderungen zwischen verschiedenen Versionen Ihrer Dateien zu verstehen. Dieser Befehl liefert eine Zusammenfassung der Änderungen und zeigt die Anzahl der hinzugefügten und gelöschten Zeilen für jede Datei an.

Zunächst stellen wir sicher, dass wir uns in unserem Projektverzeichnis befinden. Öffnen Sie Ihr Terminal und navigieren Sie zum Verzeichnis my-time-machine:

cd ~/project/my-time-machine

Jetzt machen wir eine Änderung an unserer message.txt-Datei. Wir fügen ihr eine neue Zeile hinzu:

echo "Hello, Past Me" >> message.txt

Der >>-Operator hängt den Text an die bestehende Datei an, anstatt sie zu überschreiben.

Lassen Sie uns erneut den Status unseres Repositorys überprüfen:

git status

Sie sollten sehen, dass message.txt geändert wurde:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

no changes added to commit but untracked files present (use "git add" to track)

Jetzt verwenden wir git diff --numstat, um die Zusammenfassung der von uns vorgenommenen Änderungen anzuzeigen:

git diff --numstat

Die Ausgabe sollte in etwa so aussehen:

1       0       message.txt

Diese Ausgabe sagt uns, dass in message.txt 1 Zeile hinzugefügt und 0 Zeilen gelöscht wurden. Dies ist eine kompakte Möglichkeit, die Gesamtwirkung Ihrer Änderungen an mehreren Dateien zu sehen.

Das Verständnis von git diff --numstat ist nützlich, wenn Sie einen schnellen Überblick darüber erhalten möchten, wie stark sich eine Datei geändert hat, ohne den genauen Inhalt der Änderungen zu sehen. Dies ist besonders hilfreich, wenn Sie die von anderen vorgenommenen Änderungen überprüfen oder wenn Sie den Umfang der Modifikationen in Ihrer eigenen Arbeit sehen möchten.

Ausführen des file-Befehls auf einer Datei

In diesem Schritt lernen wir über den file-Befehl, ein nützliches Werkzeug in Linux, das Ihnen den Typ einer Datei mitteilt. Dies ist wichtig, da Git Textdateien und Binärdateien unterschiedlich behandelt.

Zunächst stellen Sie sicher, dass Sie sich in Ihrem Projektverzeichnis befinden:

cd ~/project/my-time-machine

Jetzt verwenden wir den file-Befehl auf unserer message.txt-Datei:

file message.txt

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

message.txt: ASCII text

Dies sagt uns, dass message.txt eine Textdatei ist. Git ist so konzipiert, dass es sehr gut mit Textdateien funktioniert, da es Zeilenweise Änderungen leicht verfolgen kann.

Wie sieht es mit anderen Dateitypen aus? Lassen Sie uns eine einfache Binärdatei erstellen. Wir können den head-Befehl verwenden, um die ersten paar Bytes einer Systemdatei zu nehmen und sie in eine neue Datei in unserem Projekt umzuleiten. Beispielsweise erstellen wir eine kleine "Binär"-Datei aus dem ausführbaren /bin/ls:

head -c 1024 /bin/ls > binary_file

Dieser Befehl nimmt die ersten 1024 Bytes der /bin/ls-Datei und speichert sie als binary_file in Ihrem aktuellen Verzeichnis.

Jetzt verwenden wir den file-Befehl auf dieser neuen Datei:

file binary_file

Die Ausgabe wird anders sein und darauf hinweisen, dass es sich um eine Binärdatei handelt. Sie könnte in etwa so aussehen:

binary_file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=..., for GNU/Linux 3.2.0, BuildID[sha1]=..., stripped

Diese Ausgabe bestätigt, dass binary_file keine einfache Textdatei ist. Git behandelt Binärdateien unterschiedlich, da es Zeilenweise Änderungen nicht leicht bestimmen kann. Stattdessen speichert es in der Regel die gesamte Binärdatei für jede Version.

Das Verständnis des Unterschieds zwischen Text- und Binärdateien ist von entscheidender Bedeutung, wenn Sie mit Git arbeiten, insbesondere wenn Sie mit Dateien wie Bildern, kompilierten Programmen oder komprimierten Archiven umgehen. Git's leistungsstarke Diff- und Merge-Fähigkeiten sind in erster Linie für Textdateien konzipiert.

Test von Text- vs. Binärdateien

In diesem Schritt werden wir sehen, wie Git Änderungen in Textdateien im Vergleich zu Binärdateien behandelt. Dies wird verdeutlichen, warum Git's Diff-Fähigkeiten in erster Linie für Text konzipiert sind.

Zunächst stellen Sie sicher, dass Sie sich in Ihrem Projektverzeichnis befinden:

cd ~/project/my-time-machine

Wir haben bereits unsere message.txt (Textdatei) und binary_file. Lassen Sie uns eine weitere Änderung an message.txt vornehmen:

echo "Another line for the future" >> message.txt

Jetzt fügen wir beide Dateien in die Staging-Area ein und committen sie. Zuerst fügen wir die Dateien hinzu:

git add message.txt binary_file

Überprüfen Sie den Status, um sicherzustellen, dass beide Dateien in der Staging-Area sind:

git status

Sie sollten beide Dateien unter "Changes to be committed" aufgeführt sehen:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   message.txt
        new file:   binary_file

Jetzt committen wir diese Änderungen:

git commit -m "Add binary file and update message"

Sie werden eine Ausgabe sehen, die den Commit bestätigt und die Änderungen an beiden Dateien enthält:

[master ...] Add binary file and update message
 2 files changed, 2 insertions(+)
 create mode 100644 binary_file

Jetzt machen wir eine kleine Änderung an der binary_file. Wir können ihr ein einzelnes Byte anhängen:

echo -n "a" >> binary_file

Das -n-Flag verhindert, dass echo ein Zeilenumbruchzeichen hinzufügt.

Überprüfen Sie erneut den Status:

git status

Git wird anzeigen, dass binary_file geändert wurde:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   binary_file

no changes added to commit but untracked files present (use "git add" to track)

Jetzt versuchen wir, den Unterschied mit git diff anzuzeigen:

git diff

Anstatt Zeilenweise Änderungen anzuzeigen, wird Git Ihnen wahrscheinlich mitteilen, dass sich die Binärdatei unterscheidet:

warning: LF will be replaced by CRLF in binary_file.
The file has no newline at the end of the file.
diff --git a/binary_file b/binary_file
index ... ...
Binary files a/binary_file and b/binary_file differ

Diese Ausgabe zeigt deutlich, dass Git nicht versucht, die detaillierten Änderungen innerhalb der Binärdatei anzuzeigen. Es gibt einfach an, dass sich die Dateien unterscheiden. Dies ist ein wesentlicher Unterschied in der Art und Weise, wie Git Text- im Vergleich zu Binärdateien behandelt. Bei Textdateien kann Git Ihnen genau anzeigen, welche Zeilen hinzugefügt, entfernt oder geändert wurden. Bei Binärdateien kann es Ihnen nur mitteilen, dass eine Änderung stattgefunden hat.

Dieser Schritt zeigt, warum Git's leistungsstarke Diff- und Merge-Tools am effektivsten mit textbasiertem Inhalt sind, der in Quellcode und Konfigurationsdateien häufig vorkommt.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man feststellt, ob eine Datei in Git binär ist. Wir haben zwei Hauptmethoden untersucht. Zunächst haben wir den Befehl git diff --numstat verwendet, um die Änderungen zwischen Dateiversionen zu untersuchen. Dabei haben wir beobachtet, wie er Hinzufügungen und Löschungen zusammenfasst, was indirekt anhand des Änderungsausmaßes die Art der Datei anzeigen kann.

Zweitens haben wir über den file-Befehl gelernt, einem Standard-Linux-Werkzeug, und wie man es verwendet, um direkt den Typ einer Datei zu identifizieren und zwischen Text- und Binärformaten zu unterscheiden. Dieser direkte Ansatz ist von entscheidender Bedeutung, da Git die Behandlung von Binärdateien deutlich anders handhabt als Textdateien.