development

Git Git commit diffs 또는 contents for a specific word?

big-blog 2020. 10. 3. 11:21
반응형

Git Git commit diffs 또는 contents for a specific word?


Git 코드 저장소에서 특정 단어가 포함 된 모든 커밋을 나열하고 싶습니다. 나는 이것을 시도했다

git log -p | grep --context=4 "word"

하지만 파일 이름을 반드시 돌려주는 것은 아닙니다 (검색 한 단어에서 5 줄 미만이 아닌 경우에는 말입니다.

git grep "word"

그러나 그것은 나에게 역사가 아닌 현재 파일만을 제공합니다.

특정 단어에 대한 변경 사항을 추적 할 수 있도록 전체 기록을 검색하려면 어떻게합니까? 내 코드베이스에서 변경 내용을 추적하기 위해 단어 발생을 검색한다는 의미입니다 (파일 기록에서 검색).


커밋 메시지 에 주어진 단어 포함 된 모든 커밋을 찾으려면 다음을 사용하십시오.

$ git log --grep=word

파일 내용 에서 "단어"가 추가되거나 제거 된 모든 커밋을 찾으려면 (정확히 말하면 "단어"발생 횟수가 변경된 위치), 즉 커밋 내용을 검색합니다. 소위 'pickaxe'검색을

$ git log -Sword

현대 git에는 또한

$ git log -Gword

추가되거나 제거 된 줄이 "단어"와 일치하는 차이점 을 찾습니다 ( 내용커밋 ).

참고 -G기본적으로하면서, 정규식을 받아 -S문자열을 허용하지만,를 사용하여 정규 표현식에 동의 수정할 수 있습니다 --pickaxe-regex.

의 차이를 설명하기 위해 -S<regex> --pickaxe-regex하고 -G<regex>, A는 같은 파일에 다음 DIFF와 커밋 고려 :

+    return !regexec(regexp, two->ptr, 1, &regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);

while git log -G"regexec\(regexp"will show this commit, git log -S"regexec\(regexp" --pickaxe-regexwill not (왜냐하면 해당 문자열의 발생 횟수가 변경되지 않았기 때문).


git log의 곡괭이는 "단어"를 포함하여 변경된 커밋을 찾습니다. git log -Sword


많은 실험 끝에 주어진 정규 표현식을 포함하는 줄을 도입하거나 제거하는 커밋을 보여주고, 단어가 추가 및 제거 된 색상으로 각각의 텍스트 변경 사항을 표시하는 다음을 권장 할 수 있습니다.

git log --pickaxe-regex -p --color-words -S "<regexp to search for>"

그래도 실행하는 데 시간이 걸립니다 ... ;-)


다음 명령을 시도 할 수 있습니다.

git log --patch --color=always | less +/searching_string

또는 grep다음과 같은 방법으로 사용 :

git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'

검색하려는 상위 디렉토리에서이 명령을 실행하십시오.


한 가지 더 방법 / 구문은 다음 git log -S "word"
과 같습니다 . 이와 같이 예를 들어 검색 할 수 있습니다.git log -S "with whitespaces and stuff @/#ü !"


vim-fugitiveVim 에서 그런 종류의 검사를 위해 다재다능합니다.

:Ggrep그렇게하는 데 사용 합니다. 자세한 내용은 vim-fugitive를 설치하고 :help Grep. 그리고이 에피소드 : git-repository의 역사 탐색 은 모든 작업을 수행하도록 안내합니다.


정규식에서 부울 커넥터를 사용하려면 다음을 수행하십시오.

git log --grep '[0-9]*\|[a-z]*'

이 정규식은 커밋 메시지에서 정규식 [0-9] * 또는 [az] *를 검색합니다.


git 기록에서 제거하기 위해 민감한 데이터를 검색하려는 경우 (여기에 방문한 이유)이를위한 도구가 있습니다. Github는 해당 문제에 대한 전용 도움말 페이지입니다 .

이 기사의 요점은 다음과 같습니다.

BFG 리포-클리너는 원치 않는 데이터를 제거하는 자식 필터 지점에 빠르고 간단한 대안입니다. 예를 들어 민감한 데이터가있는 파일을 제거하고 최신 커밋을 변경하지 않으려면 다음을 실행합니다.

bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

저장소 기록에서 찾을 수있는 모든 곳에서 passwords.txt에 나열된 모든 텍스트를 바꾸려면 다음을 실행합니다.

bfg --replace-text passwords.txt

전체 사용 및 다운로드 지침 BFG Repo-Cleaner의 설명서참조하십시오 .

참고 URL : https://stackoverflow.com/questions/1337320/how-to-grep-git-commit-diffs-or-contents-for-a-certain-word

반응형