Große Datei aus mehreren Commits entfernen (in git)

5570
Gentatsu

Ich hatte mehrere lokale Commits für meine Codebase gemacht und versuchte es in mein Repo zu verschieben, aber es gab eine Menge großer Dateien. Ich habe einfach aufgegeben und habe weiter gearbeitet und lokale Verpflichtungen eingegangen. Ich habe die großen Dateien jetzt gelöscht und erneut festgeschrieben, aber es wird immer noch versucht, die großen Originaldateien zu verschieben. Ich habe versucht, einen Gititore hinzuzufügen, nachdem ich ursprünglich zugesagt hatte, jede Datei über 50 MB zu ignorieren, ohne Erfolg.

Irgendwelche Ideen?

6

1 Antwort auf die Frage

10
ladorm

Lesen Sie hier über den Filterzweig.

Jemand schreibt aus Versehen eine riesige Binärdatei mit einem gedankenlosen Git-Add. Fest, und Sie möchten sie überall entfernen. Möglicherweise haben Sie versehentlich eine Datei festgelegt, die ein Kennwort enthielt, und Sie möchten, dass Ihr Projekt Open Source ist. Filterzweig ist das Werkzeug, mit dem Sie wahrscheinlich den gesamten Verlauf löschen möchten. Um eine Datei mit dem Namen passwords.txt aus Ihrem gesamten Verlauf zu entfernen, können Sie die Filteroption --tree-filter verwenden, um zu filtern:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten 

Sie können auch an der Stelle, an der Sie diese Dateien festgeschrieben haben, eine interaktive Neugestaltung in Ihrem Zweig vornehmen und sie aus dem Commit entfernen. Der Link oben erklärt dies auch, im Grunde jedoch:

git rebase -i HEAD~X 

können Sie die letzten X-Commits bearbeiten.

Ich habe jedoch ziemlich viele große Dateien und es scheint, als würde es eine Weile dauern. Gentatsu vor 7 Jahren 0
Ich denke, Sie meinen mit Filterzweig wegen der mehreren Dateien. Kannst du nicht eine Regex verwenden, um alle zu erreichen? Dann ist es vielleicht die zweite Option (Umbasierung), da es einfacher ist, das Commit auszuführen und die Dateien auf dieselbe Weise aus dem System zu löschen, wie Sie sie bereits gelöscht haben ladorm vor 7 Jahren 0
Würde sich das nicht auf meine aktuellen Dateien auswirken? Würden sie sich nicht auch verändern, oder müsste ich sie zusammenführen? Gentatsu vor 7 Jahren 0
Wenn Sie Ihre Dateien nicht berühren, werden sie nicht geändert. Die Datenbank führt Ihre Dateien bis zum Zeitpunkt dieses Commits in die Historie zurück und beginnt, Ihre Commits erneut anzuwenden. Sie stoppt beim Commit, den Sie zur Bearbeitung markiert haben. Bei diesem Commit müssen Sie diese Dateien entfernen und dann mit 'git commit --ammend' (das ist der Link, den ich Ihnen gegeben habe) festschreiben. Dadurch wird Ihr Commit geändert, und Sie setzen die Rebase fort. Anschließend werden die restlichen Commits angewendet ladorm vor 7 Jahren 0
Vergessen Sie das! Ich habe eine Rebase gemacht und alle meine Commits, einschließlich der neuen Ignore-Datei, zerdrückt, und das hat funktioniert. Gentatsu vor 5 Jahren 0