Rozejrzałem się i nie jestem pewien, czy jest to możliwe, ale oto:
Mam plik (javascript) (powiedzmy /lib/client.js), w którym mam przypisany do zmiennej unikalny identyfikator, na przykład:
var identifier = "SOME_IDENTIFIER";
Możesz myśleć o identyfikatorze jak o numerze wersji: okresowo będziemy zmieniać tę zmienną na nowy identyfikator.
Chciałbym znaleźć wszystkie unikalne identyfikatory, których kiedykolwiek używaliśmy. Jak mogę to zrobić z git?
Wyobrażam sobie, że może istnieć sposób na przeszukanie historii git i wydrukowanie dopasowania linii "var identifier ="
. Mógłbym ręcznie usunąć duplikaty tej listy.
W każdym razie byłbym wdzięczny za wszelkie wglądy. Dzięki.
Odpowiedzi:
Od wersji git 1.8.4 istnieje bardziej bezpośredni sposób odpowiedzi na twoje pytanie.
Zakładając, że ta linia
110
jest linią mówiącąvar identifier = "SOME_IDENTIFIER";
, zrób to:To zwróci każde zatwierdzenie, które dotknęło tej linii kodu.
[ Dokumentacja Git (zobacz paramenter wiersza poleceń „-L”)]
źródło
Zobacz stronę podręcznika dla
git-log
igitdiffcore
. Wierzę, że to polecenie by to zrobiło, ale może nie być całkiem poprawne:EDYCJA: Oto przybliżony początek skryptu bash, który pokazuje rzeczywiste linie. To może być bardziej tym, czego szukasz.
Używa
git log -G
do znajdowania interesujących zatwierdzeń, używając--format=%H
do tworzenia listy skrótów zatwierdzeń. Następnie iteruje po każdym interesującym zatwierdzeniu, proszącgit grep
o pokazanie wierszy z tego zatwierdzenia i pliku, które zawierają wyrażenie regularne, poprzedzone hashem zatwierdzenia.EDYCJA: Zmieniono, aby używać
-G
zamiast-S
sugerowanych w komentarzach.źródło
sfile=path/to/some_file; sfind='string_to_find'; for c in $(git log -G $sfind --format=%H -- $sfile); do git --no-pager grep -e $sfind -n $c -- $sfile; echo; done
Możesz to również zrobić za pomocą gitk:
W menu „zatwierdzenie” wybierz „dodawanie / usuwanie ciągu:” iw polu tekstowym obok niego wpisz „identyfikator zmiennej =”, a wszelkie zatwierdzenia, które dodają lub usuwają wiersze zawierające ten ciąg, zostaną podświetlone.
źródło
git blame file.js
lubgit gui blame file.js
?git gui blame file.js
zrobi to ... pokaże Ci wszystkie wersje pliku i kto go zmienił; możesz po prostu przewijać historię wstecz.Jeśli trochę dostosujesz odpowiedź @ rob, w
git log
zasadzie zrobię to za Ciebie, jeśli potrzebujesz tylko wizualnego porównania:-U0
oznacza wyjście w trybie patch (-p
) i pokazuje zero linii kontekstu wokół łatki.Możesz to zrobić nawet w różnych oddziałach:
Może istnieć sposób na zablokowanie nagłówka diff, ale nie znam go.
źródło
W magii możesz to zrobić za pomocą
Następnie zapyta cię o plik oraz początek i koniec linii.
źródło