W repozytorium kodu Git chcę wyświetlić listę wszystkich zatwierdzeń zawierających określone słowo. Próbowałem tego
git log -p | grep --context=4 "word"
ale niekoniecznie zwraca mi nazwę pliku (chyba że jest mniej niż 5 linii od szukanego słowa. Próbowałem także
git grep "word"
ale daje mi tylko obecne pliki, a nie historię.
Jak przeszukać całą historię, aby śledzić zmiany dotyczące określonego słowa? Zamierzam przeszukać bazę kodów pod kątem występowania słów w celu śledzenia zmian (wyszukiwanie w historii plików).
Odpowiedzi:
Jeśli chcesz znaleźć wszystkie zatwierdzenia, w których komunikat zatwierdzenia zawiera dane słowo, użyj
Jeśli chcesz znaleźć wszystkie zatwierdzenia, w których „słowo” zostało dodane lub usunięte w treści pliku (a ściślej: gdzie zmieniła się liczba wystąpień „słowa”), tj. Przeszukaj zawartość zatwierdzenia , użyj tak zwanego wyszukiwania „kilof” za pomocą
W nowoczesnym git jest też
szukać różnic, których dodana lub usunięta linia pasuje do „słowa” (również zatwierdza treść ).
Zauważ, że
-G
domyślnie akceptuje regex, podczas gdy-S
akceptuje ciąg, ale można go zmodyfikować, aby akceptował regex za pomocą--pickaxe-regex
.W Git 2.25.1 (luty 2020) dokumentacja została wyjaśniona wokół tych wyrażeń regularnych.
Zobacz commit 9299f84 (06 lutego 2020) autorstwa Martina Ågrena (``) .
(Połączone przez Junio C Hamano -
gitster
- w commit 0d11410 , 12 lutego 2020)git diff
Dokumentacja obejmuje obecnie:źródło
-S<string>
Poszukaj różnic, które wprowadzają lub usuwają wystąpienie <ciąg>.-G<string>
Poszukaj różnic, których dodana lub usunięta linia pasuje do podanego <regex>.-S<string>
jest szybsza, ponieważ sprawdza ona tylko, czy liczba wystąpień się<string>
zmieniła, podczas gdy-G<string>
wyszukiwania dodawały i usuwały wiersz w każdej zmianie zatwierdzenia.git log --grep="my words"
,.--grep
różni się od-S
i-G
. Możesz zacytować ciąg do każdego z tych argumentów.git log
Kilof znajdzie zmiany ze zmianami, w tym „słowo” zgit log -Sword
źródło
Po wielu eksperymentach mogę polecić następujące, które pokazują zatwierdzenia, które wprowadzają lub usuwają wiersze zawierające dane wyrażenie regularne, i wyświetlają zmiany tekstu w każdym z kolorów pokazujących słowa dodane i usunięte.
Trwa jednak trochę czasu ... ;-)
źródło
GIT_PAGER=cat
albo dołącz je za pomocą| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Możesz spróbować wykonać następujące polecenie:
lub używając
grep
w następujący sposób:Uruchom to polecenie w katalogu nadrzędnym, w którym chcesz wyszukać.
źródło
git log --patch --color=always | less +/searching_string
.Jeszcze jeden sposób / składnia, aby to zrobić: W
git log -S "word"
ten sposób możesz na przykład wyszukać
git log -S "with whitespaces and stuff @/#ü !"
źródło
vim-fugitive jest wszechstronny do tego rodzaju badań w Vimie.
Użyj,
:Ggrep
aby to zrobić. Aby uzyskać więcej informacji, możesz zainstalować vim-fugitive i przejrzeć turorial:help Grep
. A ten odcinek: badanie historii repozytorium git poprowadzi cię do tego wszystkiego.źródło
Aby użyć łącznika boolowskiego w wyrażeniu regularnym:
To wyrażenie regularne szuka wyrażenia regularnego [0-9] * lub [az] * w komunikatach zatwierdzania.
źródło
Jeśli chcesz wyszukać poufne dane, aby usunąć je z historii gitów (to jest powód, dla którego tu trafiłem), istnieją na to narzędzia. Github jako dedykowana strona pomocy dla tego problemu .
Oto treść artykułu:
źródło