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