Weder Git noch Mercurial verarbeiten große Binärdateien sehr gut. Beide gehen davon aus, dass verfolgte Dateien relativ klein und leicht zu unterscheiden sind, PDF-Dateien jedoch nicht. Wenn Sie bereits ausgeführt haben git gc
, wird Ihr Repository nicht viel kleiner als es bereits ist.
Wenn Sie keine Drittanbieterlösung wünschen, können Sie dies durch die Verwendung von Submodulen mit Git verringern. Wenn es sinnvoll ist, können Sie die verschiedenen Dateien in Ihrem Repository in Submodule aufteilen und separat klonen. Auf diese Weise können Sie das Master-Projekt klonen, um alle Referenzen des Submoduls zu erhalten, und dann jedes Submodul nach Bedarf klonen.
Wie Sie vermuten, ist Git Annex wahrscheinlich die beste Lösung. Es ist ein Artefakt-Repository, ähnlich wie bfiles für Mercurial. Diese Artefakt-Repositorys sind für große, binäre, nicht diffable Dateien vorgesehen. Sie schaffen das Auffinden der Artefakte. Git und Mercurial sind nur für die Pflege der Referenzen verantwortlich. Auf diese Weise müssen Sie beim Klonen mit Git lediglich die Verweise klonen, und das Abrufen von Artefakten ist ein separater Schritt, der nach Bedarf ausgeführt wird.
Wenn Sie sich für eine dieser Routen entscheiden, sollten Sie den Verlauf des Protokolls neu schreiben, um alle zuvor festgeschriebenen Objekte zu entfernen und sie in Submodule oder Git-Anhänge zu verschieben. Wenn Sie dies nicht tun, ist Ihr Repository immer mindestens so groß wie jetzt.
git gc
Nebenbei bemerkt, der Grund für die Reduzierung der Repository-Größe war nicht, da Gits Garbage Collection nur nicht referenzierte Objekte aus dem Repository entfernt und lose Objekte in Packdateien komprimiert. Da Ihre PDFs alle referenziert werden und in den Packdateien nicht gut komprimiert werden, wäre das Repository nicht viel kleiner geworden.