Wir haben eine Reihe von git
Repositories, die aufgrund der historischen Aufnahme von binären Testdateien und Java .jar
Dateien zu einer unüberschaubaren Größe gewachsen sind.Ist es möglich, ein .git-Repository zu verkleinern, ohne den Verlauf neu zu schreiben?
Wir sind gerade dabei, durch die Ausübung von git filter-branch
ing diesen Repositories zu gehen, wieder klonen sie überall, wo sie verwendet werden (aus Dutzenden bis Hunderten von Installationen jeder, je nach dem Repo) und der problems with rewriting history gegeben Ich habe mich gefragt, ob es könnte irgendeine andere Lösung sein.
Idealerweise möchte ich Problemdateien externalisieren, ohne den Verlauf jedes Repositorys neu zu schreiben. Theoretisch sollte das möglich sein, weil Sie die gleichen Dateien mit den gleichen Größen und den gleichen Hashes auschecken und sie nur von einem anderen Ort (einem entfernten Ort als dem lokalen Objektspeicher) beziehen. Leider scheint mir keine der möglichen Lösungen, die ich bisher gefunden habe, dies zu ermöglichen.
Beginnend mit git-annex, die nächstgelegene ich auf eine Lösung für mein Problem How to retroactively annex a file already in a git repo war finden konnte, aber wie bei nur die großen Dateien zu entfernen, erfordert dies die Geschichte neu geschrieben werden, um die ursprünglichen git add
in ein git annex add
zu konvertieren.
von dort Umzug auf, begann ich bei anderen Projekten auf what git-annex is not aufgelistet suchen, so untersuchte ich git-bigfiles, git-media und git-fat. Leider können wir die git-bigfiles Gabel von git
nicht verwenden, da wir ein Eclipse Geschäft sind und eine Mischung aus git
und EGit verwenden. Es sieht nicht wie git-media oder git-fat kann tun, was ich will, entweder, während Sie vorhandene große Dateien durch die externen Entsprechungen ersetzen konnten, müssten Sie noch die Geschichte neu schreiben, um groß zu entfernen Dateien, die bereits begangen wurden.
Ist es also möglich, ein .git-Repository zu verkleinern, ohne den Verlauf neu zu schreiben, oder sollten wir zum Plan zurückkehren, git filter-branch
und eine ganze Menge von Umsetzungen zu verwenden?
Als beiseite, glauben, dass diese sollte möglich sein, ist aber wahrscheinlich den gleichen Beschränkungen wie die von git
aktuellen shallow clone Implementierung gebunden.
Git unterstützt bereits mehrere mögliche Standorte für die gleiche Blob, da jedes gegebene Blob im loose object store (.git/objects
) oder in einem pack file (.git/Objekte) könnte so theoretisch würde man nur so etwas wie git-annex
müssen einzuhaken auf diesem Niveau eher als höher (dh haben das Konzept eines Downloads auf Anfrage Remote-Blob, wenn Sie mögen). Leider kann ich niemanden finden, der so etwas implementiert oder vorgeschlagen hat.
Soweit ich sagen kann, fragen Sie, wie man Geschichte umschreiben, ohne Geschichte neu schreiben. – alternative
@alternative nicht ganz, ich frage, ob es eine Möglichkeit gibt, das Repository zu verkleinern * ohne * die Geschichte neu zu schreiben. Momentan sieht es so aus als wäre die Verwendung von * seichten Klonen * der einzige Weg, aber die Einschränkungen würden wahrscheinlich nicht gut mit unserem Workflow zusammenpassen und selbst wenn dies der Fall wäre, würden sie nur die lokalen (Klone) Repos verkleinern, nicht die entfernten Repos. –
Die einzige Möglichkeit, das Repository zu "verkleinern", wäre, den Inhalt, den Sie abnehmen, zu löschen - daher das Neuschreiben (weshalb jede Antwort sagt, dass dies nicht möglich ist). Es gibt wirklich keine Probleme mit dem Umschreiben von Verlauf, solange Sie es richtig machen. Und ja, flache Klone würden nur die lokalen Repositories betreffen. – alternative