Git - 메서드/함수의 변경 이력은 어떻게 표시합니까?
그래서 파일의 변경 이력을 어떻게 볼 것인가 하는 질문을 찾았습니다만, 이 파일의 변경 이력은 매우 크고, 저는 특정 방법의 변경에만 관심이 있습니다.그렇다면 그 특정 방법에 대한 변경 이력을 볼 수 있을까요?
코드를 분석하려면 git이 필요하고 언어마다 분석이 다르다는 것은 알지만, 대부분의 언어에서 메서드/함수 선언은 매우 비슷해 보이기 때문에 누군가가 이 기능을 구현한 것은 아닐까 생각했습니다.
현재 사용하고 있는 언어는 Objective-C, 현재 사용하고 있는 SCM은 git입니다만, SCM/언어에 이 기능이 존재하는지 알고 싶습니다.
의 최신 버전에서는 의 특별한 형식을 학습했습니다.-L★★★★★★★★★★★★★★★★★★:
- L : < funcname > : < file >
행 를 추적해 .
"<start>,<end>"('regex')<funcname>의 내부에서는,<file>이치노이것은 현재 단일 개정에서 시작하는 걷기로 제한됩니다. 즉, 0 또는 하나의 양의 개정 인수만 제공할 수 있습니다.이 옵션은 여러 번 지정할 수 있습니다.
if“:<funcname>”<start>★★★★★★★★★★★★★★★★★」<end>funcname 행부터 행에 일치하는 범위를 정규 표현입니다.<funcname>이치노“:<funcname>”" " "의 끝에서 "-L범위(있는 경우)를 지정합니다.그 이외의 경우는, 파일의 선두부터 입력합니다.“^:<funcname>”파일 시작 부분부터 검색합니다.
,을 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git log -L :myfunction:path/to/myfile.c이제 해당 기능의 변경 내역을 인쇄합니다.
「」를 사용합니다.git gui blame, 는 「」입니다.git log -G ★★★★★★★★★★★★★★★★★」git log --pickaxe각각 메서드 정의가 언제 나타나거나 사라졌는지 보여줄 수 있지만, 메서드 본문에 적용된 모든 변경 사항을 나열할 수 있는 방법을 찾을 수 없습니다.
,는 할 수 .gitattributes 및textconv이러한 기능을 하는 솔루션을 조합하는 데 사용됩니다.이러한 기능은 원래 이진 파일을 사용하는 데 도움이 되도록 고안되었지만 여기서도 똑같이 작동합니다.
중요한 것은 Git이 다른 작업을 하기 전에 원하는 행을 제외한 모든 행을 파일에서 삭제하도록 하는 것입니다. ★★★★★★★★★★★★★★★.git log,git diff볼수 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
이것은 제가 다른 언어로 하는 일의 개요입니다.여러분의 필요에 따라 조정할 수 있습니다.
하나의 인수(소스 파일의 이름)를 사용하여 해당 파일의 관심 부분만 출력하는 짧은 셸 스크립트(또는 다른 프로그램)를 작성합니다.를 들어, 「」를 할 수 있습니다.
sed음음음같 뭇매하다#!/bin/sh sed -n -e '/^int my_func(/,/^}/ p' "$1"Git의
textconv을 해 주세요.gitattributes남자필터 이름 및 명령어 위치는 원하는 대로 지정할 수 있습니다.$ git config diff.my_filter.textconv /path/to/my_scriptGit에게 해당 파일의 차이를 계산하기 전에 해당 필터를 사용하라고 하십시오.
$ echo "my_file diff=my_filter" >> .gitattributes그럼 이제 ,을 쓰면 now을 쓰면 겠습니다''
-G.:.시 수 필터를 적용했을 때 가시적인 변경을 생성하는 모든 커밋을 나열하면 관심 있는 커밋이 표시됩니다. 루틴을 예: Git diff route--patch서는,, 이이이이표표 다다다다다다$ git log -G. --patch my_file보야!
필터 스크립트가 메서드 이름을 첫 번째 인수(및 두 번째 인수)로 사용하도록 하는 것이 유용할 수 있습니다. 하면, 「신규의 방법」을 호출하는 만으로, 새로운 할 수 .git config스크립트를 편집할 필요가 없습니다.예를 들어 다음과 같이 말할 수 있습니다.
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
물론 필터 스크립트는 사용자가 원하는 모든 작업을 수행할 수 있고, 더 많은 논쟁을 수행할 수도 있습니다. 여기서 보여드린 것 이상의 유연성이 있습니다.
파일 의 기능의 를 들어, 의 함수가 어떤 위치에 있는지 알 수 있습니다).i_am_buggy는 241~263행의 입니다.foo/bar.c 다음과 같은 해 보겠습니다
git log -p -L 200,300:foo/bar.c
이렇게 하면 열리는 횟수가 줄어듭니다(또는 동등한 호출기)., 이제 ./i_am_buggy(또는 동등한 호출기)를 클릭하여 변경 내용을 단계별로 설명합니다.
코드 스타일에 따라서는, 다음과 같이 동작할 수도 있습니다.
git log -p -L /int i_am_buggy\(/,+30:foo/bar.c
이것에 의해, 그 정규식의 첫 번째 히트(이상적으로는 함수 선언)로부터, 그 후의 30 행까지 검색이 제한됩니다.end 인수는 regexp일 수도 있지만 regexp를 사용하여 검출하는 것이 더 적절합니다.
git log에는 '-G' 옵션이 있어 모든 차이를 찾을 수 있습니다.
추가 된 -G의 행과 .
<regex>.
관심 있는 함수 이름의 적절한 정규식을 지정하기만 하면 됩니다.예를들면,
$ git log --oneline -G'^int commit_tree'
40d52ff make commit_tree a library function
81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory
7b9c0a6 git-commit-tree: make it usable from other builtins
은 '우리'를 사용하는 입니다.git log -L :function:path/to/fileeckes 답변에 설명된 바와 같이.
또한 함수가 매우 긴 경우 이러한 행 중 하나만을 터치할 수 있는 각 커밋에 대해 함수 행 전체가 아니라 다양한 커밋이 추가한 변경만 볼 수 있습니다.의 통통 와 같이diff
통상은 「」입니다.git log와의 를 알 수 -p 이 은 안 -Lgrep git log -Lcommit/files commit/files 。하고, 「」를 추가하는 입니다.--color스위치, 정규식을 사용합니다.★★★★★★★★★★★★★★★★★★:
git log -L :function:path/to/file --color | grep --color=never -E -e "^(^[\[[0-9;]*[a-zA-Z])+" -3
:^[ 리터럴^[. 입력은 bash의 ^V^[, 즉 +, + 를 눌러 할 수 있습니다.여기서 참조해 주세요.
마지막 ★★★★★★★★★★★★★★★★★」-3switch를line.의 3 할 수 있습니다.이치
을 「」와 함께 합니다.
git log -L :<funcname>:<file>eckes의 답변과 git doc에서 알 수 있듯이아무것도 표시되지 않는 경우는, 「커스텀 행크 헤더의 정의」를 참조해 주세요.
*.java diff=java.gitattributes일일을파with " " " " " " " 。
git log commit1..commit2 -L :functionName:filePath이력가 많을 수다를 수 있음)을 오(((((((((((다양한 함수)로 표시합니다.
git log -L :sum\(double:filepath
git prame은 파일의 각 행을 마지막으로 변경한 사람을 나타냅니다.기능 외 행의 이력을 취득하지 않도록 검사할 행을 지정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4781405/git-how-do-i-view-the-change-history-of-a-method-function
'programing' 카테고리의 다른 글
| dispatch_async에 대해서 (0) | 2023.04.09 |
|---|---|
| 목록의 항목을 단일 문자열에 연결하는 방법 (0) | 2023.04.09 |
| 문자열에서 슬래시 발생 횟수를 찾는 방법 (0) | 2023.04.09 |
| 커스텀 컨트롤과 사용자 컨트롤 (0) | 2023.04.09 |
| WooCommerce 3에서 'woocommerce_grouped_children_args' 필터가 제거되었기 때문에 제품 자식을 그룹화하여 주문할 수 있습니다. (0) | 2023.04.04 |