Git을 사용하여 모든 로컬 지점의 모든 파일에서 주어진 문자열을 어떻게 검색 할 수 있습니까?
GitHub 관련 : 모든 GitHub 브랜치에서 위의 검색을 수행 할 수 있습니까? (원격 GitHub 저장소에는 여러 가지 원격 브랜치가있어 이상적 으로이 검색을 중단 할 필요가 없습니다 ...)
Git을 사용하여 모든 로컬 지점의 모든 파일에서 주어진 문자열을 어떻게 검색 할 수 있습니까?
GitHub 관련 : 모든 GitHub 브랜치에서 위의 검색을 수행 할 수 있습니까? (원격 GitHub 저장소에는 여러 가지 원격 브랜치가있어 이상적 으로이 검색을 중단 할 필요가 없습니다 ...)
답변:
Git 저장소에서이를 수행 할 수 있습니다.
git grep "string/regexp" $(git rev-list --all)
GitHub 고급 검색에는 코드 검색 기능이 있습니다.
코드 검색은 GitHub에 공개적으로 호스팅 된 모든 코드를 살펴 봅니다. 다음을 기준으로 필터링 할 수도 있습니다.
language:
repo:
path:
git grep ...
. 다른 답변을 살펴보십시오.이 답변은 허용 된 답변으로 표시되어 있지만이 답변보다 훨씬 좋습니다!
path:
, 필터 예제를 추가 할 수 있다면 좋을 것입니다 . 문서를 한눈에 살펴보면 쿼리 예제에서 따옴표 앞에 있다고 가정하여이 필터를 적용 할 위치를 명확하게 알 수 없습니까?
@manojlds Git grep 명령을 사용하고 오류가 발생하는 경우 :
-bash: /usr/bin/git: Argument list too long"
그런 다음 xargs 를 사용해야합니다 .
git rev-list --all | xargs git grep "string/regexp"
Git 히스토리에서 커밋 된 코드를 grep (검색)하는 방법 도 참조하십시오.
많은 경우에 git rev-list --all
, 많은 수의 커밋을 반환하여 영원히 스캔 할 수 있습니다. 저장소 히스토리의 모든 브랜치에서 모든 커밋을 검색하는 대신 모든 브랜치 팁을 검색하려는 경우이를로 바꿀 수 있습니다 git show-ref --heads
. 따라서 총계 :
git grep "string" `git show-ref --heads`
또는:
git show-ref --heads | xargs git grep "string"
팁 : 파일로 출력을 작성하여 편집기에서 볼 수 있습니다.
nano ~/history.txt
git show-ref --heads | xargs git grep "search string here" >> ~/history.txt
git show-ref --heads
해시와 참조 이름을 나열하므로 두 번째 줄은 두 번 검색합니다. git show-ref --heads | cut -d' ' -f2
참조 이름 만 나열 하므로 더 좋습니다.
git show-ref --heads -s
SHA1 해시 만 출력합니다. 또한 동일한 커밋을 가리키는 여러 분기가 있으면 중복됩니다. 다음과 sort -u
같이 제거 할 수 있습니다.git show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
여기에 나열된 솔루션에는 몇 가지 문제가 있습니다 (심지어 받아 들여짐).
중복을 얻을 수 있으므로 모든 해시를 나열 할 필요는 없습니다. 또한 시간이 더 걸립니다.
당신이 문자열을 검색 할 수 있습니다 곳이 기반으로 "test -f /"
여러 가지에 master
와 dev
등을
git grep "test -f /" master dev
어느
printf "master\ndev" | xargs git grep "test -f /"
여기로갑니다.
이것은 모든 로컬 브랜치의 팁에 대한 해시를 찾고 해당 커밋에서만 검색합니다.
git branch -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
원격 지점에서도 검색 해야하는 경우 다음을 추가하십시오 -a
.
git branch -a -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
더욱이:
# Search in local branches
git branch | cut -c3- | xargs git grep "string"
# Search in remote branches
git branch -r | cut -c3- | xargs git grep "string"
# Search in all (local and remote) branches
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
# Search in branches, and tags
git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
아니면 실패합니다 ->
원격 지사 관계 로컬 의미 파일 목록에서 기호
당신은 이것을 시도 할 수 있습니다 :
git log -Sxxxx # Search all commits
git log -Sxxxx --branches[=<pattern>] # Search branches
git log --all -s"search_string"