Ich habe ein Git-Repo mit einigen sehr großen Binärdateien drin. Ich brauche sie nicht mehr und es ist mir egal, ob ich die Dateien aus früheren Commits auschecken kann. Um also die Repo-Größe zu reduzieren, möchte ich die Binaries komplett aus der History löschen.Aktualisieren Sie ein Entwickler-Team mit neu geschriebenen Git Repo Geschichte, Entfernen von großen Dateien
Nach einer Web-Suche, stellte ich fest, dass meine beste (nur?) Option zu verwenden ist git-filter-branch
:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
dies so weit wie ein guter Ansatz scheint?
Angenommen, die Antwort ist ja, ich habe ein anderes Problem zu kämpfen. Die git manual has this warning:
WARNUNG! Der neu geschriebene Verlauf wird für alle Objekte unterschiedliche Objektnamen haben und nicht mit dem ursprünglichen Zweig konvergieren. Sie werden nicht in der Lage sein, den umgeschriebenen Zweig auf den ursprünglichen Zweig zu schieben und zu verteilen. Bitte verwenden Sie diesen Befehl nicht, wenn Sie die vollständigen Implikationen nicht kennen, und vermeiden Sie es trotzdem, wenn ein einfaches einzelnes Commit ausreichen würde, um Ihr Problem zu beheben. (Siehe "Fehlgeschlagene UPSTREAM REBASE" in git-rebase (1) für weitere Informationen über veröffentlichte Geschichte neu zu schreiben.)
Wir sind auf unserem Server eine Remote-Repo haben. Jeder Entwickler schiebt an und zieht daraus. Basierend auf der obigen Warnung (und meinem Verständnis davon, wie git-filter-branch
funktioniert), glaube ich nicht, dass ich in der Lage sein werde, git-filter-branch
auf meiner lokalen Kopie auszuführen und dann die Änderungen zu übertragen.
Also, ich habe vor, versuchsweise durch die folgenden Schritte zu gehen:
- alle meine Entwickler per eMail zu begehen, Push-und Stopp für ein bisschen arbeiten.
- Melden Sie sich beim Server an und führen Sie den Filter auf dem zentralen Repo aus.
- Lassen Sie alle ihre alten Kopien löschen und erneut vom Server klonen.
Klingt das richtig? Ist das die beste Lösung?
Es kommt mir jetzt, dass die * einfachste *, was zu tun sein könnte Ihre Entwickler jedem Lauf die haben identischer 'git-filter-branch' Befehl. Sie sollten mit Geschichten enden, die identisch mit denen sind, die Sie erstellt haben, ohne dass Sie sie erneut klonen oder manuell umbauen müssen. –
@BenJackson die Code-Dateien wären identisch, aber die Commit-Objekte werden verschiedene Committer-Metadaten durch die Rebase hinzugefügt haben. – Douglas
@Douglas Ich glaube nicht, dass 'git filter-branch' Committer-Daten ändert, wenn Sie nicht explizit danach gefragt werden. ('git commit --rebase' tut, aber nicht' git filter-branch', soweit ich das sehen kann.) – cdhowie