Jak w Git mogę wyszukać plik lub katalog według ścieżki w wielu oddziałach?
Napisałem coś w oddziale, ale nie pamiętam, który. Teraz muszę to znaleźć.
Wyjaśnienie : Szukam pliku, który utworzyłem w jednym z moich oddziałów. Chciałbym znaleźć ją według ścieżki, a nie według jej zawartości, ponieważ nie pamiętam, co to jest.
Odpowiedzi:
git log
+git branch
znajdzie to dla ciebie:Obsługuje także globbing:
Pojedyncze cudzysłowy są konieczne (przynajmniej jeśli używasz powłoki Bash), więc powłoka przekazuje wzorzec glob bez zmian, zamiast go rozszerzać (tak jak w Uniksie
find
).źródło
somefile
: jeśli potrzebujesz na przykład wyrażenia regularnego nad ścieżką / nazwą pliku, możesz użyć odpowiedzi ididaka.git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. Działa jak urok. wersja git 1.7.11.1gitk
obsługuje także globbing. To doskonała odpowiedź na @webmat! Jeśli chcesz zobaczyć, gdzie został usunięty / utworzony / itp., Możesz użyćgit log --all --stat -- **/my_file.png
, w ten sposób nie będziesz musiał zgadywać, czy sprawdzasz go z zatwierdzenia, które go usunęło.git ls-tree może pomóc. Aby wyszukać we wszystkich istniejących oddziałach:
Zaletą tego jest to, że można również wyszukiwać nazwy plików za pomocą wyrażeń regularnych.
źródło
git for-each-ref --format="%(refname)" refs/heads
; do” (c) „git ls-tree - only-name” sprawi, że wyjście będzie bardziej uporządkowane (d) warto w swojej odpowiedzi wskazać, że ma to przewagę nad rozwiązaniem Dustina, a mianowicie, że nie musisz dokładnie znać nazwy pliku - możesz wyszukiwać za pomocą wyrażenia regularnego pasującego do dowolnej części ścieżkirefs/remotes
zamiastrefs/heads
. Aby wyszukać wszystko (oddziały lokalne, oddziały i tagi do zdalnego śledzenia), wystarczy użyćrefs/
.Chociaż odpowiedź ididaka jest całkiem fajna, a Handyman5 zapewnia skrypt do jego użycia, uznałem, że stosowanie tego podejścia jest nieco ograniczone.
Czasami musisz szukać czegoś, co może pojawić się / zniknąć z czasem, więc dlaczego nie szukać wbrew wszystkim zatwierdzeniom? Poza tym czasami potrzebujesz pełnej odpowiedzi, a innym razem tylko dopasowania. Oto dwie wersje tych opcji. Umieść te skrypty na swojej ścieżce:
git-find-file
git-find-file-verbose
Teraz możesz zrobić
Zobacz, że używając getopt możesz modyfikować ten skrypt, aby naprzemiennie przeszukiwać wszystkie zatwierdzenia, referencje, referencje / głowy, były pełne, itp.
Zapoznaj się z https://github.com/albfan/git-find-file pod kątem możliwej implementacji.
źródło
Możesz użyć
gitk --all
i wyszukać zatwierdzone „ścieżki dotykowe” oraz nazwę ścieżki, którą jesteś zainteresowany.źródło
Skopiuj i wklej to, aby użyć
git find-file SEARCHPATTERN
Drukowanie wszystkich wyszukiwanych gałęzi:
Drukuj tylko oddziały z wynikami:
Polecenia te doda pewne minimalne skrypty powłoki bezpośrednio do
~/.gitconfig
jako globalnego git alias .źródło
Całkiem przyzwoitą implementację
find
polecenia dla repozytoriów Git można znaleźć tutaj:https://github.com/mirabilos/git-find
źródło