Ist Git gut mit Binärdateien?
Wenn viele unkomprimierte Dateien geändert werden und viele komprimierte Dateien nie (oder fast nie) geändert werden, würde git dann gut damit umgehen? Wenn ich zum Beispiel die Mitte einfüge oder entferne und Daten gegen Ende einfüge, merkt es das wie beim Text?
Wenn Git mit Binärdateien nicht gut ist, welches Tool könnte ich in Betracht ziehen?
Antworten:
Standardmäßig kann git einfach Binärdateien zu seinem Index hinzufügen und diese auf effiziente Weise speichern, es sei denn, Sie führen häufige Aktualisierungen großer nicht komprimierbarer Dateien durch.
Die Probleme beginnen, wenn git Unterschiede und Zusammenführungen generieren muss: git kann keine aussagekräftigen Unterschiede erzeugen oder Binärdateien auf eine Weise zusammenführen, die sinnvoll sein könnte. Bei allen Zusammenführungen, Rebases oder Cherrypicks, die eine Änderung an einer Binärdatei beinhalten, müssen Sie eine manuelle Konfliktlösung für diese Binärdatei vornehmen.
Sie müssen entscheiden, ob die Änderungen an Binärdateien selten genug sind, damit Sie mit der zusätzlichen manuellen Arbeit leben können, die sie im normalen Git-Workflow mit Zusammenführungen, Rebases und Cherrypicks verursachen.
quelle
git diff --binary
Binärdateien patchen.Neben anderen Antworten.
Sie können ein Diff im binären Diff- Format an eine Binärdatei senden . Es ist nicht für Menschen lesbar und kann nur angewendet werden, wenn Sie ein genaues Vorbild in Ihrem Repository haben, dh ohne Fuzz.
Ein Beispiel:
Sie können textconv gitattribute verwenden ,
git diff
um ein für Menschen lesbares Diff für Binärdateien oder Teile von Binärdateien anzuzeigen. Zum Beispiel kann es bei * .jpg-Dateien Unterschiede in den EXIF-Informationen geben, bei PDF-Dateien kann es Unterschiede in der Textdarstellung geben (pdf2text oder ähnliches).HTH.
quelle
Wenn Sie wirklich große Binärdateien haben, können Sie git-annex verwenden, um die Daten außerhalb des Repositorys zu speichern. Überprüfen Sie heraus: http://git-annex.branchable.com/
quelle
Ich kenne keine Tools, die versuchen, verschiedene Binärdateien für die Versionskontrolle zu speichern, aber es ist erwähnenswert, dass Git dies nicht einmal für Textdateien tut. Git speichert Dateien als Blobs und unterscheidet sie bei Bedarf.
Wenn Sie die Versionskontrolle für Photoshop / Illustrator-Dokumente durchführen möchten , ist GridIron Flow möglicherweise das Richtige für Sie. Wenn Sie versuchen, sie zwischen Computern synchron zu halten, können Dropbox oder Rsync damit umgehen, aber sie werden keine intelligenten Unterschiede machen.
quelle
git gc
um die Speicherbereinigung durchzuführen. Auf derselben Seite: "Da Git jede Version jeder Datei als separates Objekt speichert, kann es ziemlich ineffizient werden. Stellen Sie sich vor, eine Datei ist mehrere tausend Zeilen lang und ändert eine einzelne Zeile. Git speichert die zweite Datei in ihrer Gesamtheit ist eine große Platzverschwendung. "git gc
: "Benutzer werden aufgefordert, diese Aufgabe regelmäßig in jedem Repository auszuführen, um eine gute Speicherplatzauslastung und eine gute Betriebsleistung aufrechtzuerhalten. Einige git-Befehle führen möglicherweise automatisch git gc aus. Weitere Informationen finden Sie im Flag --auto unten . "Nun, Git ist gut mit Binärdateien. Binärdateien wie Textdateien werden jedoch nicht verarbeitet. Es ist, als ob Sie Binärdateien zusammenführen möchten. Ich meine, ein Diff auf einem JPEG wird dir niemals etwas zurückgeben. Git funktioniert sehr gut mit Textdateien und wahrscheinlich genauso schlecht wie jede andere Lösung mit Binärdateien!
quelle
Wenn Sie eine Lösung für die Versionierung suchen, sollten Sie git-lfs in Betracht ziehen , sollten , das einen leichten Zeiger auf Ihre Datei hat.
Wenn Sie Ihr Repo klonen, werden nicht alle Versionen heruntergeladen, sondern nur die ausgecheckte.
Hier ist ein schönes Tutorial, wie man es benutzt
quelle