2009-06-28 5 views
1

Ich bemerkte gerade, dass meine .gitconfig-Datei öffentlich in meinem Repo war. Es enthält meine geheimen Token.Kann. Gitconfig in alten Git-Commits nicht finden

I git-add -u die Datei und verpflichtet. Ich bin mir nicht sicher, ob dieser Befehl die Datei auch von den vorherigen Commits entfernt.

Ich möchte sicher sein und die Datei in meinen früheren Commits suchen, so dass es keine solche Datei in meinem Verlauf gibt.

Wie können Sie die Datei in früheren Commits durchsuchen?


Ich betreibe

git filter-branch --tree-filter 'rm .gitconfig' master  # Thanks to Greg! 

I

Rewrite 84dabfa2ea195ce9aad0309216858b302150017c (1/25)rm: .gitconfig: No such file or directory 
tree filter failed: rm .gitconfig 

Die Fehlermeldung deutet darauf hin, mich zu bekommen, dass ich die Datei nicht an meiner Geschichte begehen.

Gibt es eine Möglichkeit, die Datei in meinem Commit-Verlauf zu durchsuchen, so dass ich die Entfernung nicht ausführen muss, um zu sehen, dass ich die Datei nicht in meinem Commit-Verlauf habe?

+0

Vielen Dank für Ihre Antworten! –

Antwort

4

Kurze Antwort:

git filter-branch --tree-filter 'rm -f .gitconfig' master 

Notiere die -f.

Lange Antwort:

rm zurückkehren würde einen Nicht-Null-Return-Code, wenn die Datei nicht existiert. filter-branch denke, dies ist ein Fehler und stoppen Sie das Neuschreiben. Hinzufügen -f vermeiden Sie dies.

Hinweis:

Es gibt eine Alternative Befehl:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitconfig' master 

die viel schneller ist. Dieser Befehl ist im Abschnitt EXAMPLE der Manpage dokumentiert.

+0

@ J-16: Beide Befehle geben mir dieselbe Fehlermeldung wie in meiner Frage. Das deutet darauf hin, dass ich die Datei versehentlich durch einen Befehl bereits entfernt habe. --- Wissen Sie, wie Sie .gitconfig in Git's Verlauf suchen können, so dass ich sicher sein kann, dass es keine solche Datei gibt? –

+0

nur 'git log .gitconfig' sollte den Verlauf anzeigen. HINWEIS: .git/config (und alles unter .git /) ist * NICHT * versioniert, nur .gitconfig. –

+0

@ J-16: Ich bekomme die Information, dass die Commits 57d6 und 0d97 meine geheimen Tokens enthalten. (1) Wie kann ich diese Commits sehen? (2) Wie kann ich diese .gitconfig Dateien von diesen Commits entfernen? –

4

Um eine Datei aus dem gesamten Git-Verlauf zu entfernen, müssen Sie alle vergangenen Commits mit etwas wie git filter-branch neu schreiben. Wenn Sie dies tun, wird Ihr neuer Baum jedoch mit allen vorherigen Bäumen zusammengeführt. Tun Sie dies vorsichtig.

+0

Ich würde gerne mit den Git-Dateien in/tmp spielen. --- Ich habe erfolglos mit ihnen gespielt, nachdem ich .git nach/tmp kopiert habe. --- Das deutet darauf hin, dass ich alle Dateien mit .git nach/tmp kopieren muss. --- @ Wie würdest du eine zweite Kopie machen, damit du den Befehl testen kannst? –

+1

Sie können ein Repository mit "Git Clone" klonen. Alles, was Sie mit dem geklonten Repository tun, wirkt sich nicht auf das ursprüngliche Repository aus (es sei denn, Sie übertragen Ihre Änderungen natürlich). –

1

Setzen Sie alle ewvisions im Repository auf globale Standardwerte (.gitconfig) zurück.

git filter-branch -f --commit-filter 'GIT_COMMITTER_NAME="`git config --get user.name`";GIT_AUTHOR_NAME="`git config --get user.name`";GIT_COMMITTER_EMAIL="git config --get user.email";GIT_AUTHOR_EMAIL="`git config --get user.email`";git commit-tree "[email protected]";' HEAD