Git - Jak oglądać historię zmian method/function?
Dlatego znalazłem pytanie o tym, jak przeglądać historię zmiany pliku, ale historia zmian w tym konkretnym pliku jest ogromna, a w rzeczywistości interesuje się tylko zmianami w konkretnej metodzie. Czy można zobaczyć historię zmian tylko dla tej konkretnej metody?
Wiem, że wymaga to git Aby przeanalizować kod i że analiza będzie różna dla różnych języków, ale reklamy metod/Funkcje wyglądają bardzo podobnie w większości języków, więc pomyślałem, że może ktoś zaimplementował tę funkcję.
Język, z którym teraz pracuję - Objective-C, ale SCM, Które używam teraz, - git, Ale byłbym zainteresowany wiedzieć, czy ta funkcja istnieje SCM/language.
Wiem, że wymaga to git Aby przeanalizować kod i że analiza będzie różna dla różnych języków, ale reklamy metod/Funkcje wyglądają bardzo podobnie w większości języków, więc pomyślałem, że może ktoś zaimplementował tę funkcję.
Język, z którym teraz pracuję - Objective-C, ale SCM, Które używam teraz, - git, Ale byłbym zainteresowany wiedzieć, czy ta funkcja istnieje SCM/language.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
7 odpowiedzi
Karol
Potwierdzenie od:
https://git-scm.com/docs/git-log/
Studiował specjalną formę parametru
:
-L. :<funcname>:<file>
Trace Ewolucja określonego zakresu liniowego
/lub nazwa funkcji. regex
/ w ciągu
. Nie możesz podać żadnych ograniczeń pathspec. Obecnie ogranicza się do spaceru począwszy od jednej zmiany, to znaczy, możesz dać tylko zero lub jeden pozytywny argument rewizji. Możesz określić tę opcję kilka razy.
...
Zamiast tego
i
zestaw
, Następnie jest to wyrażenie regularne, które wskazuje zakres od pierwszej linii funcname, odpowiedni
, Do następnego wiersza funcname.
Wyszukiwania z końca poprzedniego zakresu
, Jeśli ktoś jest dostępny, w przeciwnym razie od początku pliku.
Wyszukaj od samego początku pliku.
Innymi słowy: jeśli zapytasz Git -
, Chętnie wydrukował historię zmian w tej funkcji.
</funcname></funcname></funcname></funcname></end></start></file></funcname></end></start></file></funcname>
Włodzimierz
Potwierdzenie od:
Trudno jest stosować w skryptach i chociaż
i
może pokazać, kiedy definicja metody pojawiła się lub zniknęła, nie znalazłem żadnego sposobu, aby wymienić wszystkie zmiany wprowadzone
ciało
Twoja metoda.
Możesz jednak użyć
i nieruchomość
, Zebrać tę decyzję, która to sprawia. Chociaż funkcje te były pierwotnie zaprojektowane, aby pomóc Ci pracować z plikami binarnymi, pracują również tutaj.
Kluczem jest Git Usunął wszystkie linie z pliku, z wyjątkiem tych, którzy Cię interesują, przed wykonaniem jakichkolwiek operacji diff. Następnie
,
I tak dalej. Zobaczysz tylko ten obszar cię interesuje.
Oto zarys tego, co robię w innym języku; Możesz dostosować go do własnych potrzeb.
Napisz krótki skrypt shell /lub inny program./, który otrzymuje jedną argumentę pliku źródłowego - i wyświetla tylko interesującą część tego pliku. /lub nic, jeśli nic nie jest interesujące/. Na przykład możesz użyć
w następujący sposób:
Określ filtr Git
Dla twojego nowego scenariusza. /Aby uzyskać więcej informacji, zobacz stronę odniesienia.
./ Nazwa filtra i lokalizacja polecenia może być dowolna.
Powiedz mi Git Użyj tego filtra przed obliczeniem różnic dla rozważanego pliku.
Teraz, jeśli używasz
/Zwróć uwagę na
/ Aby wyliczyć wszystkie zobowiązania, które wytwarzają widoczne zmiany podczas korzystania z filtra, będziesz miał te zobowiązania, które Cię interesują. Wszelkie inne parametry za pomocą procedur Git diff, Jak na przykład
, Dostaj również ten ograniczony wydajność.
Voila!
Jedną z przydatnych ulepszeń, które możesz zrobić, jest to, że skrypt filtrów akceptuje nazwę metody jako pierwszego argumentu. /Plik jako drugi/. Pozwala to określić nową metodę zainteresowania, po prostu dzwoniąc
, i nie edytuj skryptu. Na przykład możesz powiedzieć:
Oczywiście skrypt filtra może zrobić wszystko, co lubisz, zrobić więcej argumentów lub czegoś innego: jest duża elastyczność, która wykracza poza to, co pokazałem tutaj.
Bogusław
Potwierdzenie od:
ma opcję '- G', które mogą być używane do poszukiwania wszystkich różnic.
- G Wyszukaj różnice, dodany lub zdalny ciąg odpowiada
określony
.
Po prostu daj mu prawo regex Nazwa funkcji, która się martwi. Na przykład,
</regex>
Janusz
Potwierdzenie od:
Znajduje się w wierszach 241-263 z
/, A następnie uruchom coś w rodzaju:
Otworzy się mniej /lub równoważny pager./. Teraz możesz wejść
/lub odpowiednik twojego pagera/ I zacznij spacerować przez zmiany.
Może nawet działać, w zależności od stylu kodu:
Ogranicza wyszukiwanie z pierwszego trafienia tego. regex /Idealnie funkcja reklamy/ do trzydziestu linii po tym. Ostateczny argument może być również wyrażeniem regularnym, chociaż wykrywanie
tego
Z pomocą wyrażeń regularnych jest bardziej złożona propozycja.
Mariusz
Potwierdzenie od:
, Jak opisano
Dawny .
Ale poza tym, jeśli Twoja funkcja jest bardzo długa, możesz zobaczyć tylko zmiany dokonane przez różne fotoryzację/Zatwierdzać/, a nie całe linie funkcji zawartych w niezmienionej formie dla każdej fotowania/Popełnić/, co może dotyczyć tylko jednej z tych linii. Jak zwykle
.
Zazwyczaj
może oglądać różnice
, Ale to nie działa
.
Więc musisz
Pokaż tylko wiązane linie i tytuł commits/files, Kontekstualizować je. Sztuczka tutaj ma się tylko porównać terminal Kolorowe linie, dodając przełącznik
, z regex. Wreszcie:
Zwróć uwagę na to
^[
musi być rzeczywisty, dosłowny
^[
. Możesz je wprowadzić, klikając ^V^[ w bash, to znaczy
Ctrl
+
V
,
Ctrl
+
[
. Połączyć
https://unix.stackexchange.com/a/150/292111
.
Również ostatni przełącznik
Umożliwia drukowanie 3 Rzędy kontekstu wyjściowego, przed i po każdej linii dopasowania. Być może chcesz dostosować go do Twoich potrzeb.
Wiesław
Potwierdzenie od:
Pokazuje, kto po raz ostatni zmienił każdą linię pliku; Możesz określić struny, aby sprawdzić, aby uniknąć wykonywania historii rzędu poza funkcją.
Jarosław
Potwierdzenie od:
, Jak pokazano w
Ex the I.
https://www.git-scm.com/docs/g ... ilegt
Jeśli nic nie pokazuje, kontakt
https://git-scm.com/docs/gitat ... _text
, Dodać coś takiego
do pliku.
Aby wspierać swój język.
Pokaż historię funkcji między zobowiązaniami
Pokaż historię przeciążonych funkcji /Może istnieć wiele funkcji o tej samej nazwie, ale z różnymi parametrami/ z
</file></funcname>