Git 리포지토리의 브랜치 및 기록을 검색하기 위한 도구

Git 리포지토리의 브랜치 및 기록을 검색하기 위한 도구

저는 파일 이름과 파일 내용(예: find/ )을 기반으로 grepGit 저장소에서 파일을 검색 할 수 있는 도구나 스크립트 제안을 찾고 있습니다. 현재 체크아웃된 브랜치 내에서 검색할 수 있어야 할 뿐만 아니라 해당 브랜치뿐만 아니라 다른 브랜치의 기록도 검색할 수 있어야 합니다.

내가 가지고 있는 Git 저장소의 매우 구체적인 예는 체크아웃입니다.dspinellis'unix-history-repo. 나는 종종 사물의 과거 구현을 찾기 위해 그곳에서 찾아보지만 종종 필요하기 때문에 파일을 추적하는 것은 고통스럽습니다.추측하다어떤 브랜치가 있는지 확인해야 합니다(이 저장소에는 165개의 브랜치가 있습니다).

이 도구를 사용하여 수행하려는 작업의 예이다wow명령 찾기, 초기 BSD Unix의 일부로 존재하는 경우(존재하는 경우) 외부 명령 sh이거나 내장 명령일 수 있습니다. csh이를 위해 dspinellis Git 저장소의 165개 분기에서 wow.*파일 이름 패턴과 특정 시점에 C 함수를 포함할 수 있는 파일을 검색하고 싶었습니다.wow

답변1

하하, 나도 무슨 짓을 했는지 맞춰봐...

내가 사용하는 모든 브랜치에서 파일 이름을 찾으려면

git log --all --name-only --pretty=format:%H -- wow\*

wow어떤 글로브로도 교체 가능합니다. 이는 Unix 기록 저장소에서 상당히 빠르게 실행됩니다. 형식에는 일치하는 파일이 생성된 해시 값이 표시되므로 이 시점에서 트리를 검사하고 더 자세히 탐색할 수 있습니다.

모든 지점에서 파일 내용을 검색하려면 다음을 사용합니다.

git rev-list --all | xargs git grep "excited too"

모든 커밋 개체를 나열하고 검색합니다. Unix 히스토리 저장소에서는 매우 느립니다. 모든 브랜치를 나열하고 거기에서 grep하는 것이 더 빠릅니다.

git grep "excited too" $(git branch -r | awk '{print $1}')

관련 정보