Ich weiß, dass Git irgendwie automatisch erkennt, ob eine Datei binär oder textuell ist, und dass .gitattributes
dies verwendet werden kann, um dies bei Bedarf manuell einzustellen. Aber gibt es auch eine Möglichkeit, Git zu fragen, wie eine Datei behandelt wird?
Nehmen wir also an, ich habe ein Git-Repository mit zwei Dateien: Eine ascii.dat
Datei mit Klartext und eine binary.dat
Datei mit zufälligen Binärdateien. Git behandelt die erste .dat
Datei als Text und die sekundäre Datei als Binärdatei. Jetzt möchte ich ein Git-Web-Frontend schreiben, das einen Viewer für Textdateien und einen speziellen Viewer für Binärdateien enthält (z. B. Anzeige eines Hex-Dumps). Sicher, ich könnte meine eigene Text- / Binärprüfung implementieren, aber es wäre nützlicher, wenn sich der Betrachter auf die Informationen verlassen würde, wie Git mit diesen Dateien umgeht.
Wie kann ich Git fragen, ob eine Datei als Text oder Binärdatei behandelt wird?
git diff --numstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD -- "$1"
.gibt die Namen von Dateien zurück, die git als Textdateien interpretiert.
Sie können Platzhalter verwenden, z
quelle
-e .
diese Version (möglicherweise auf Kosten der falschen Identifizierung von Textdateien, die nur aus Leerzeilen bestehen!).-e .
, um kompatibler zu sein, und hinzugefügt--untracked
, um mit einer größeren Auswahl an Dateien zu arbeiten.Diese Antwort gefällt mir nicht, aber Sie können die Ausgabe von git-diff-tree analysieren, um festzustellen, ob sie binär ist. Zum Beispiel:
im Gegensatz zu:
Oh, und übrigens, 4b825d… ist eine magische SHA, die den leeren Baum darstellt (es ist die SHA für einen leeren Baum, aber Git ist sich dieser Magie besonders bewusst).
quelle
git diff-tree --numstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
die das- - filename
Format hat.git diff --numstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD -- | grep "^-" | cut -f 3
Auf die Gefahr hin, wegen schlechter Codequalität geschlagen zu werden, liste ich das C-Dienstprogramm is_binary auf, das auf der ursprünglichen Routine buffer_is_binary () in der Git-Quelle basiert. In den internen Kommentaren erfahren Sie, wie Sie erstellen und ausführen. Leicht modifizierbar:
quelle
Sie können das Befehlszeilenprogramm 'Datei' verwenden. Unter Windows ist es in der Git-Installation enthalten und befindet sich normalerweise im Ordner C: \ Programme \ git \ usr \ bin
Weitere Informationen finden Sie unter Codierung einer Datei in Windows abrufen
quelle