530 Stimmen

Entfernen sensibler Dateien und ihrer Übertragungen aus dem Git-Verlauf

Ich möchte ein Git-Projekt auf GitHub stellen, aber es enthält bestimmte Dateien mit sensiblen Daten (Benutzernamen und Passwörter, wie /config/deploy.rb für capistrano).

Ich weiß, dass ich diese Dateinamen zu .gitignore aber dies würde ihre Geschichte in Git nicht löschen.

Ich möchte auch nicht wieder von vorne anfangen, indem ich das Verzeichnis /.git lösche.

Gibt es eine Möglichkeit, die alle Spuren einer bestimmten Datei in Ihrem Git-Verlauf?

16voto

vertigo71 Punkte 218

Hier ist meine Lösung unter Windows

git filter-branch --tree-filter "rm -f 'filedir/filename'" HEAD

git push --force

sicherstellen, dass der Pfad korrekt ist sonst wird es nicht funktionieren

Ich hoffe, es hilft

13voto

Verwenden Sie filtern-verzweigen :

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *file_path_relative_to_git_repo*' --prune-empty --tag-name-filter cat -- --all

git push origin *branch_name* -f

5voto

Ercan Punkte 2203

In meinem Android-Projekt hatte ich admob_keys.xml als getrennte xml-Datei in app/src/main/res/values/ Ordner. Um diese sensible Datei zu entfernen, habe ich das folgende Skript verwendet, das perfekt funktioniert.

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch  app/src/main/res/values/admob_keys.xml' \
--prune-empty --tag-name-filter cat -- --all

3voto

b01 Punkte 3732

Das musste ich bisher ein paar Mal tun. Beachten Sie, dass dies nur für jeweils 1 Datei funktioniert.

  1. Liefert eine Liste aller Commits, die eine Datei verändert haben. Der unterste Eintrag ist der erste Commit:

    git log --pretty=oneline --branches -- pathToFile

  2. Um die Datei aus der Historie zu entfernen, verwenden Sie die erste Übergabe sha1 und den Pfad zur Datei aus dem vorherigen Befehl und geben sie in diesen Befehl ein:

    git filter-branch --index-filter 'git rm --cached --ignore-unmatch <path-to-file>' -- <sha1-where-the-file-was-first-added>..

2voto

przbadu Punkte 5401

Es sieht also in etwa so aus:

git rm --cached /config/deploy.rb
echo /config/deploy.rb >> .gitignore

Entfernen Sie den Cache für die verfolgte Datei aus Git und fügen Sie die Datei zu .gitignore Liste

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X