programing

Git - 메서드/함수의 변경 이력은 어떻게 표시합니까?

easyjava 2023. 4. 9. 22:28
반응형

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각각 메서드 정의가 언제 나타나거나 사라졌는지 보여줄 수 있지만, 메서드 본문에 적용된 모든 변경 사항을 나열할 수 있는 방법을 찾을 수 없습니다.

,는 할 수 .gitattributestextconv이러한 기능을 하는 솔루션을 조합하는 데 사용됩니다.이러한 기능은 원래 이진 파일을 사용하는 데 도움이 되도록 고안되었지만 여기서도 똑같이 작동합니다.

중요한 것은 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_script
    
  • Git에게 해당 파일의 차이를 계산하기 전에 해당 필터를 사용하라고 하십시오.

    $ 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 할 수 있습니다.이치

  1. 을 「」와 함께 합니다.git log -L :<funcname>:<file>eckes의 답변과 git doc에서 알 수 있듯이

    아무것도 표시되지 않는 경우는, 「커스텀 행크 헤더의 정의」를 참조해 주세요.*.java diff=java.gitattributes일일을파

  2. with " " " " " " " 。git log commit1..commit2 -L :functionName:filePath

  3. 이력가 많을 수다를 수 있음)을 오(((((((((((다양한 함수)로 표시합니다.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

반응형