Vor einiger Zeit habe ich Informationen (Dateien) hinzugefügt, die privat sein müssen. Das Entfernen aus dem Projekt ist kein Problem, aber ich muss es auch aus dem git
Verlauf entfernen .
Ich benutze Git und Github (privater Account).
Hinweis: In diesem Thread wird etwas Ähnliches angezeigt, aber hier ist eine alte Datei, die einem Feature-Zweig hinzugefügt wurde. Dieser Zweig wurde zu einem Entwicklungszweig zusammengeführt und schließlich zum Master zusammengeführt, da hier viele Änderungen vorgenommen wurden. Es ist also nicht dasselbe und es ist erforderlich, den Verlauf zu ändern und diese Dateien aus Datenschutzgründen auszublenden.
git rebase
danngit push -f
filter-branch
im vorgeschlagenen Duplikat beschriebene Methode macht das, was Sie wollen.git filter-branch
Antworten:
Ich habe diese Antwort gefunden und es hat geholfen:
Fand es hier https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
quelle
.env
. Schnelle und präzise Lösung.Wenn Sie diese Datei kürzlich festgeschrieben haben oder wenn sich diese Datei in ein oder zwei Festschreibungen geändert hat, würde ich vorschlagen , dass Sie diese bestimmte Festschreibung verwenden
rebase
undcherrypick
entfernen.Andernfalls müssten Sie den gesamten Verlauf neu schreiben.
Wenn Sie mit den Änderungen zufrieden sind und ordnungsgemäß sichergestellt haben, dass alles in Ordnung zu sein scheint, müssen Sie alle Remote-Zweige aktualisieren.
Hinweis: - Es ist eine komplexe Operation, und Sie müssen wissen, was Sie tun. Versuchen Sie es zunächst in einem Demo-Repository, um zu sehen, wie es funktioniert. Sie müssen auch andere Entwickler darüber informieren, damit sie in der Zwischenzeit keine Änderungen vornehmen.
quelle
--all
. Jetzt heißt es immer auf dem neuesten Stand, wenn ich mit beiden Argumenten erneut drücke. Und die Datei wird nicht aus anderen Zweigen entfernt. Was sollte ich jetzt tun?--tree-filter
eher verwendet als--index-filter
wie?Entfernen Sie die Datei und schreiben Sie den Verlauf aus dem Commit neu, den Sie mit der entfernten Datei durchgeführt haben (dadurch wird ein neuer Commit-Hash aus der von Ihnen festgeschriebenen Datei erstellt):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all
Jetzt das Repo erzwingen:
git push origin --force --all
Sagen Sie es jetzt Ihren Mitarbeitern
rebase
.quelle
Die Verwendung des bfg Repo-Cleaner- Pakets ist eine weitere praktikable Alternative zu
git-filter-branch
. Anscheinend ist es auch schneller ...quelle
Ich habe diesen GitHub-Artikel gelesen , der mich zu folgendem Befehl führte (ähnlich der akzeptierten Antwort, aber etwas robuster):
quelle
.gitignore
Datei hinzu und vergessen Sie nicht, die Datei festzuschreiben :-)Sie können diese Site verwenden: http://gtiignore.io , um das
.gitignore
für Sie zu generieren und den erforderlichen Pfad zu Ihren Binärdateien / Ordnern hinzuzufügen.Sobald Sie die Datei hinzugefügt haben, können
.gitignore
Sie die "alte" Binärdatei mit BFG entfernen.How to remove big files from the repository
Sie können
git filter-branch
oder BFG verwenden. https://rtyley.github.io/bfg-repo-cleaner/Beispiele (von der offiziellen Seite)
quelle
Git-Repo-Filter
git
empfiehlt die Verwendung von git-filter-repo (wenn dergit filter-branch
Befehl ausgeführt wird). Es gibt eine lange Liste, warum es besser ist als alle anderen Alternativen ( https://github.com/newren/git-filter-repo#why-filter-repo-instead-of-other-alternatives ). Meine Erfahrung ist dies es ist sehr einfach und sehr schnell.Dieser Befehl entfernt die Datei aus allen Commits in allen Zweigen:
git filter-repo --path <path to the file or directory> --invert-paths
Mithilfe mehrerer
--path
Parameter können mehrere Pfade angegeben werden. Eine ausführliche Dokumentation finden Sie hier: https://www.mankier.com/1/git-filter-repoquelle