Wie kann ich in Git nach einer Datei oder einem Verzeichnis über einen Pfad in mehreren Zweigen suchen?
Ich habe etwas in einer Filiale geschrieben, aber ich weiß nicht mehr, welche. Jetzt muss ich es finden.
Erläuterung : Ich suche nach einer Datei, die ich in einem meiner Zweige erstellt habe. Ich würde es gerne nach Pfad und nicht nach Inhalt finden, da ich mich nicht daran erinnere, was der Inhalt ist.
Antworten:
git log
+git branch
wird es für Sie finden:Unterstützt auch das Globbing:
Die einfachen Anführungszeichen sind erforderlich (zumindest bei Verwendung der Bash-Shell), damit die Shell das Glob-Muster unverändert an git übergibt, anstatt es zu erweitern (genau wie bei Unix
find
).quelle
somefile
: Wenn Sie beispielsweise eine Regex-Suche über den Pfad / Dateinamen benötigen, können Sie die Antwort von ididak verwenden.git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. Lief wie am Schnürchen. Git Version 1.7.11.1gitk
auch das Globbing unterstützt. Das ist eine hervorragende Antwort @webmat! Wenn Sie sehen möchten, wo es gelöscht / erstellt / usw. wurde, können Sie es verwendengit log --all --stat -- **/my_file.png
. Auf diese Weise müssen Sie nicht raten, ob Sie es aus einem Commit auschecken, der es gelöscht hat.git ls-tree könnte helfen. So suchen Sie in allen vorhandenen Filialen:
Dies hat den Vorteil, dass Sie auch mit regulären Ausdrücken nach dem Dateinamen suchen können.
quelle
git for-each-ref --format="%(refname)" refs/heads
; do". (c) "git ls-tree --name-only" macht die Ausgabe aufgeräumter (d) In Ihrer Antwort sollte darauf hingewiesen werden, dass dies gegenüber Dustins Lösung von Vorteil ist, nämlich dass Sie den Dateinamen nicht genau kennen müssen. Sie können nach regulären Ausdrücken suchen, die mit einem beliebigen Teil des Pfads übereinstimmenrefs/remotes
anstelle von Remote-Tracking-Zweigen anstelle vonrefs/heads
. Verwenden Sie einfach, um alles zu durchsuchen (lokale Zweige, Fernverfolgungszweige und Tags)refs/
.Obwohl die Antwort von ididak ziemlich cool ist und Handyman5 ein Skript zur Verwendung bereitstellt, fand ich es ein wenig eingeschränkt, diesen Ansatz zu verwenden.
Manchmal müssen Sie nach etwas suchen, das im Laufe der Zeit erscheinen / verschwinden kann. Warum also nicht nach allen Commits suchen? Außerdem benötigen Sie manchmal eine ausführliche Antwort und manchmal nur Übereinstimmungen. Hier sind zwei Versionen dieser Optionen. Fügen Sie diese Skripte in Ihren Pfad ein:
Git-Find-Datei
git-find-file-verbose
Jetzt können Sie tun
Stellen Sie sicher, dass Sie mit getopt das Skript so ändern können, dass abwechselnd alle Commits, Refs, Refs / Heads durchsucht werden.
Überprüfen Sie https://github.com/albfan/git-find-file auf eine mögliche Implementierung.
quelle
Sie können
gitk --all
Commits "berührende Pfade" und den Pfadnamen, an dem Sie interessiert sind, verwenden und suchen.quelle
Kopieren Sie diese und fügen Sie sie ein, um sie zu verwenden
git find-file SEARCHPATTERN
Alle gesuchten Zweige drucken:
Drucken Sie nur Zweige mit Ergebnissen:
Diese Befehle werden einige minimale Shell - Skripte direkt auf Ihrem hinzufügen
~/.gitconfig
als global git alias .quelle
Eine recht anständige Implementierung des
find
Befehls für Git-Repositorys finden Sie hier:https://github.com/mirabilos/git-find
quelle