Edit: im Gegensatz zu einigen ähnlichen Fragen wie Verschieben eines Multi-GB SVN Repo Git oder /programming/540535/managing-large-binary-files-with-git Mein Szenario ist nicht mit mehreren Teilprojekte , dass kann leicht in Git-Submodule oder einige sehr große Binärdateien konvertiert werden, die sich gut für Git-Annex eignen. Es ist ein einziges Repository, in dem die Binärdateien die Testsuite sind, die eng mit dem Hauptquellcode derselben Revision gekoppelt ist, ähnlich wie beim Kompilieren von Zeitressourcen wie Grafiken.
Ich untersuche, ein altes mittelgroßes / großes (50 Benutzer, 60.000 Revisionen, 80 GB-Verlauf, 2 GB-Arbeitskopie) Code-Repository von svn zu wechseln. Da die Anzahl der Benutzer gewachsen ist, gibt es eine große Abwanderung im Stamm, und die Funktionen sind häufig auf mehrere Festschreibungen verteilt, was die Codeüberprüfung schwierig macht. Auch ohne Verzweigung gibt es keine Möglichkeit, fehlerhaften Code zu "toren". Überprüfungen können nur durchgeführt werden, nachdem der Code auf "trunk" festgelegt wurde. Ich suche nach Alternativen. Ich hatte gehofft, wir könnten zum Schwachkopf ziehen, aber ich habe einige Probleme.
Das Problem mit dem aktuellen Repo ist die Größe. Es gibt eine Menge alter Kruftchen darin, und wenn Sie sie bei der Konvertierung in Git mit --filter-branch reinigen, können Sie ihre Größe um eine Größenordnung reduzieren, auf etwa 5 bis 10 GB. Das ist noch zu groß. Der Hauptgrund für die große Repository-Größe ist, dass viele Binärdokumente in Tests eingegeben werden. Diese Dateien variieren zwischen 0,5 MB und 30 MB, und es gibt Hunderte. Sie haben auch ziemlich viele Änderungen. Ich habe mir Submodule, Git-Anhänge usw. angesehen, aber die Tests in einem Submodul zu haben, fühlt sich falsch an, ebenso wie der Anhang für viele Dateien, für die Sie eine vollständige Historie wünschen.
Die verteilte Natur von git hindert mich wirklich daran, es zu übernehmen. Ich kümmere mich nicht wirklich um verteilt, ich möchte nur die günstigen Verzweigungs- und leistungsstarken Zusammenführungsfunktionen. Wie ich annehme, dass 99,9% der Git-Benutzer dies tun, werden wir ein gesegnetes, nacktes zentrales Repository verwenden.
Ich bin nicht sicher, ob ich verstehe, warum jeder Benutzer einen vollständigen lokalen Verlauf haben muss, wenn er git verwendet. Was tun die Daten auf den Festplatten der Benutzer, wenn der Workflow nicht dezentralisiert ist? Ich weiß, dass Sie in neueren Versionen von git einen flachen Klon verwenden können, der nur die jüngste Geschichte enthält. Meine Frage ist: Ist es machbar, dies als Standardbetriebsart für ein gesamtes Team zu tun? Kann git so konfiguriert werden, dass es immer flach ist, sodass Sie nur zentral einen vollständigen Verlauf haben können, aber Benutzer standardmäßig nur 1000 Umdrehungen des Verlaufs haben? Die Option dazu wäre natürlich, nur 1000 Umdrehungen in Git umzuwandeln und das SVN-Repo für die Archäologie beizubehalten. In diesem Szenario würden wir jedoch nach einigen tausend Überarbeitungen der Testdokumente wieder auf dasselbe Problem stoßen.
- Was ist eine gute Best Practice für die Verwendung von Git mit großen Repos, die viele Binärdateien enthalten, für die Sie einen Verlauf wünschen? Die meisten Best Practices und Tutorials scheinen diesen Fall zu vermeiden. Sie lösen das Problem der wenigen großen Binärdateien oder schlagen vor, die Binärdateien vollständig zu löschen.
- Ist das flache Klonen als normaler Betriebsmodus verwendbar oder ist es ein "Hack"?
- Könnten Submodule für Code verwendet werden, bei dem eine enge Abhängigkeit zwischen der Hauptquellversion und der Submodulversion besteht (z. B. in binären Kompilierzeitabhängigkeiten oder einer Komponententestsuite)?
- Wie groß ist "zu groß" für ein Git-Repository (vor Ort)? Sollten wir einen Wechsel vermeiden, wenn wir ihn auf 4 GB reduzieren können? 2 GB?