Durchsuchen Sie den gesamten Git-Verlauf nach einer Zeichenfolge [duplicate]

Lesezeit: 4 Minuten

Durchsuchen Sie den gesamten Git Verlauf nach einer Zeichenfolge duplicate
Jorge Israel Peña

Ich habe eine Codebasis, die ich als Open Source auf GitHub pushen möchte. In diesem Git-gesteuerten Quellbaum habe ich bestimmte Konfigurationsdateien, die Passwörter enthalten. Ich habe darauf geachtet, diese Datei nicht zu verfolgen, und ich habe sie auch der hinzugefügt .gitignore Datei. Ich möchte jedoch absolut sicher sein, dass keine sensiblen Informationen gepusht werden, vielleicht wenn etwas zwischen Commits rutscht oder so. Ich bezweifle, dass ich sorglos genug war, das zu tun, aber ich will es sein positiv.

Gibt es eine Möglichkeit, Git vollständig zu “grep”? Ich weiß, das klingt komisch, aber mit “alle” meine ich jede Version jeder Datei, die jemals existiert hat. Ich denke, wenn es einen Befehl gibt, der die Diff-Datei für jeden Commit ausgibt, könnte das funktionieren?

  • Es ist insofern begrenzt, als es nur einen einzigen Zweig (Master?) Durchsucht, aber es kommt dem, was Sie wollen, ziemlich nahe github.com/divinity76/SearchGithubHistory.js/blob/master/… /

    – Hansenrik

    23. Januar 2015 um 13:12 Uhr

  • Ungeachtet der „Korrekten Antworten“ müssen Sie überprüfen, ob bestimmte Informationen nicht öffentlich übertragen wurden – die „Git“-Antwort ist nur relevant, da Sie die gesamte Historie übertragen. Wenn Sie natürlich nur die aktuelle Revision ohne Historie übergeben (verwenden Sie zB “git archive”), dann reicht ein einfaches ‘grep’ aus.

    – MikeW

    20. Juli 2016 um 12:28 Uhr


  • kein Duplikat. Die andere Frage betrifft nur die Protokolle, hier geht es um alle einer Git-Geschichte. das sind andere.

    – Arbeit

    18. Dezember 2018 um 21:46 Uhr

Durchsuchen Sie den gesamten Git Verlauf nach einer Zeichenfolge duplicate
Nathan Kinsinger

Git kann Diffs mit der Option -S durchsuchen (sie heißt pickaxe in den Dokumenten)

git log -S password

Dadurch wird jeder Commit gefunden, der die Zeichenfolge hinzugefügt oder entfernt hat password. Hier ein paar Optionen:

  • -p: zeigt die Unterschiede. Wenn Sie eine Datei (-p file), wird ein Patch für Sie generiert.
  • -G: sucht nach Unterschieden, deren hinzugefügte oder entfernte Zeile mit dem angegebenen regulären Ausdruck übereinstimmt, im Gegensatz zu -Sdie “nach Unterschieden sucht, die eine Zeichenfolgeninstanz einführen oder entfernen”.
  • --all: sucht über alle Branches und Tags; alternativ verwenden --branches[=<pattern>] oder --tags[=<pattern>]

  • Wenn etwas festgeschrieben wird, gibt es eine einfache Möglichkeit, es zu entfernen? Nehmen wir an, in diesem Szenario gibt es eine Konfigurationsdatei, die ich behalten möchte, aber eine Zeile enthält ein Passwort, das ich aus meinem gesamten Git-Verlauf entfernen möchte. Gibt es eine einfache Möglichkeit, dies zu tun, ohne jeden Commit neu zu schreiben?

    – Matt D

    28. Januar 2013 um 1:12 Uhr

  • In diesem speziellen Fall würde ich auch eine einwerfen -i Groß-/Kleinschreibung bei der Suche unempfindlich zu machen.

    – köstlich

    15. Oktober 2015 um 10:58 Uhr

  • Nur zu Ihrer Information, der obige Befehl hat bei mir nicht wirklich funktioniert. Ich habe folgendes gemacht: git log -p -S <YOUR_SEARCH_TERM> Ich habe diese Informationen gestohlen dieser informative artikel über git pickaxe.

    – AlbertEngelB

    18. Februar 2016 um 20:56 Uhr

  • Ich weiß nicht, ob das neu ist, aber die verlinkten Dokumente sagen das -S sucht nach “Unterschieden, die sich ändern die Anzahl der Vorkommen der angegebenen Zeichenfolge” (Hervorhebung hinzugefügt.) Wenn also ein Commit den gesuchten Begriff hinzufügt, ihn aber auch an anderer Stelle entfernt, -S wird es nicht finden. -GOTOH, tut dies nicht.

    – shawkinaw

    17. März 2017 um 16:42 Uhr

  • Danke! Da dies eine so nützliche Referenz ist, würde ich das hinzufügen -- path/filename schränkt die Suche auf eine Datei ein.

    – ptim

    24. März 2017 um 4:42 Uhr

git rev-list --all | (
    while read revision; do
        git grep -F 'password' $revision
    done
)

  • +1: Ich hätte “for revision in `git rev-list –all`; do git grep… done” getan, aber Ihr Ansatz ist reaktiver, da er greps, während die Revisionen gefunden werden.

    – Eric O. Lebigot

    17. Dezember 2010 um 9:01 Uhr


  • Ist es möglich, dies in einem Remote-Repository (wie GitHub) zu verwenden?

    – Studienfreak

    16. März 2011 um 0:32 Uhr

  • @reesd: Natürlich nur, wenn Sie es klonen.

    – CDhowie

    22. März 2011 um 6:01 Uhr

  • Um zu vermeiden, dass Übereinstimmungen von angezeigt werden vendor/cache/ und public/assets/ändere das grep Zeile in dieser Antwort an: git grep -F 'password' $revision | grep -v ':vendor/cache/' | grep -v ':public/assets/'

    – Benutzer664833

    20. Januar 2012 um 18:47 Uhr

  • Sie können nur Dateinamen (ohne Commit-Hash) auch sortiert und ohne Duplikate erhalten. Überprüfen Sie meine Antwort darauf. Danke an das OP dieser Antwort, von dem ich mich inspirieren ließ. Hier ist meine Antwort

    – om-ha

    25. Oktober 2021 um 22:09 Uhr


1646320690 826 Durchsuchen Sie den gesamten Git Verlauf nach einer Zeichenfolge duplicate
kenorb

Probieren Sie die folgenden Befehle aus, um die Zeichenfolge in allen zuvor verfolgten Dateien zu suchen:

git log --patch  | less +/searching_string

oder

git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'

die aus dem übergeordneten Verzeichnis ausgeführt werden muss, in dem Sie die Suche durchführen möchten.

924700cookie-checkDurchsuchen Sie den gesamten Git-Verlauf nach einer Zeichenfolge [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy