Czasami miło byłoby móc powiedzieć coś takiego:
(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main
aby zobaczyć zmiany dokonane w określonej funkcji w pliku źródłowym od czasu ostatniego zatwierdzenia lub pełną historię zmian. Moje pytanie jest dwojakie:
- Czy istnieje coś, co to robi?
- Czy takie narzędzie byłoby praktyczne? Będzie musiał wykonać kilka prostych analiz parsowania kodu przy każdej wersji, aby porównać różne wersje funkcji; czy koszty ogólne byłyby zbyt duże, aby były skuteczne?
version-control
tools
jches
źródło
źródło
Odpowiedzi:
Ale co ważniejsze, musisz zrobić to samo dla każdego języka, który chcesz obsługiwać. VCS, którego punkt sprzedaży działa tylko na kodzie C, nie uzyska dużej przyczepności. Nawet jeśli zignorujesz wszystkie niejasne języki, wsparcie nawet dla 10 najpopularniejszych języków byłoby ogromnym przedsięwzięciem.
I jak zauważył Robert, możliwość natychmiastowego przeskoczenia do metody nie jest wielkim zyskiem w porównaniu z koniecznością ręcznego przeskakiwania do metody w narzędziu różnicowym.
źródło
SVN faktycznie robi coś blisko tego, co chcesz.
Możesz użyć polecenia:
-x -p
Zapewnia „c” nazwy funkcji w górnej części zestawu zmian. który wygląda takNie filtruje, ale możesz grep / search, aby ściśle służyć swojemu celowi.
Myślę, że to tylko dla „C” (lub C / C ++). Myślę jednak, że jeśli istnieje popyt, svn udostępnia go również dla innych języków.
Nie do końca zgadzam się z argumentem, że VCS NIE powinien tego robić. W końcu chcemy, aby wszystkie środowiska IDE lub edytory (takie jak VIM, EMACS) wykonywały podświetlanie składni, które jest specyficzne dla każdego języka i obsługuje wiele jednocześnie. Dlatego VCS jako narzędzie programistyczne powinno również obsługiwać taką funkcjonalność.
Oczywiście dzięki twojemu pytaniu, że je odkryłem. Nigdy wcześniej go nie używałem.
źródło
Bez wchodzenia w szczegóły, ... ale możesz sprawdzić stronę Semantic Designs i ich produkty. Oferują niektóre narzędzia wrażliwe na język , że tak powiem, bez lepszego terminu.
źródło
Monticello może to zrobić (np. Http://wiresong.ca/monticello/v2/docs/changes-browser.html ), ale jest to oczywiście oszustwo, ponieważ działa tylko dla Smalltalk.
źródło
Aby pokazać, która wersja i autor ostatnio zmodyfikowali każdą linię pliku:
źródło
ENVY i STORE robią to. Interesujące jest to, że podobnie jak w przypadku Monicello wspomnianego powyżej Logana Capaldo, one również są dla Smalltalk.
źródło