Unser Projekt hat ungefähr 11 GB, von denen 10 Binärdaten (PNG-Bilder) sind. Folglich dauert eine git diff
oder git status
-Operation mehr als eine Minute. Zum Glück sind alle Dateien in einem Ordner mit dem wunderbaren Namen getrennt data
. Die Aufgabe lautet "Vermeiden Sie das Komprimieren, Vergleichen und andere kostspielige Vorgänge mit Binärdateien."
Es wurde überlegt, das Projekt in zwei Repos aufzuteilen. Dann
data
wäre ein externes Repo, das vom Hauptquellcode-Repo ausgecheckt wird. Es wurde beschlossen, dass der Aufwand für die Synchronisierung der Repos zu hoch wäre, insbesondere für die Künstler, die mit den Datendateien arbeiten.Das explizite Erklären von git, dass diese Dateien binär sind , wobei Dateien von diffs ausgeschlossen wurden, aber diese scheinen nur eine Teillösung für die Frage zu sein.
Ich denke, dass Git-Attribute die Lösung sind, aber wie? Oder gibt es eine bessere Architektur als ein monolithisches Repo?
Antworten:
Sie können git-lfs oder ähnliche Tools (git-fat, git-annex usw.) verwenden. Diese Tools ersetzen im Grunde genommen die Binärdateien in Ihrem Repo durch kleine Textdateien mit Hashes und speichern die eigentlichen Binärdaten auf nicht-git-Weise - wie bei einer Netzwerkfreigabe.
Macht Diffs und alles superschnell, da nur Hashes verglichen werden, und ist - zumindest für git-lfs - für den Benutzer transparent (nach einmaliger Installation).
Afaik git-lfs wird von github, gitlab, VisualStudio und Open Source unterstützt.
quelle
git-lfs
ein Projekt mit vielen Gigabyte Assets mit einem gemischten Entwickler- / Künstlerteam zu bearbeiten? Ich bin daran interessiert zu wissen, ob Leute Git-LFS für Projekte wie Spiele und Animationen verwenden. Da es zum Zeitpunkt des Schreibens noch ziemlich neu ist. Nach meiner Erfahrung ist die Eintrittsbarriere für weniger technische Benutzer bereits sehr hoch, sodass eine zusätzliche Ebene für die Dateiverwaltung hinzukommt. Dies kann für Benutzer schwierig sein, es sei denn, sie sind bereits mit Git vertraut.Verwenden Sie sowohl GIT- als auch SVN-Repos
Wenn die Binärdateien logisch von der Quelle getrennt werden können, sollten Sie möglicherweise Git für Textdateien und ein Nicht-DVCS wie Subversion für die Binärdateien verwenden.
Ein Projekt, an dem ich arbeite, tut dies, da wir viele GB für pro-kompilierte Bibliotheken (für OSX / Win32-Abhängigkeiten) haben, die wir versioniert halten müssen.
Wenn Sie jedoch keine technischen Benutzer haben, kann die Verwendung von zwei Versionskontrollsystemen problematisch sein. Wenn die Interpreten jedoch nicht an Code arbeiten, können Sie ein Skript bereitstellen, um die Aktualisierung durchzuführen, und sie können Subversion verwenden, um binäre Assets festzuschreiben.
Benutze SVN (mit
git svn
)Während dieser Kompromiss für Entwickler, die es gewohnt sind, normales Git zu verwenden, nicht immer so gut ist, können Sie SVN als Haupt-Repository verwenden und Entwickler können
git svn
Tools verwenden.Für Entwickler, die git verwenden, bedeutet dies etwas mehr Arbeit, aber für alle, die mit DVCS (oder VCS im Allgemeinen) nicht vertraut sind: Sie können das einfache Modell von SVN verwenden, ohne mehrere komplexe Versionskontrollsysteme verwenden zu müssen.
git-lfs ist auch eine Option, aber ich habe es nicht benutzt und kann nicht sagen, wie gut es funktioniert.
quelle