Git 프로젝트의 모든 분기에서 'grep 검색'을 수행할 수 있습니까?
실행이 가능합니까?git grep
Git 컨트롤 소싱 프로젝트의 모든 분기 안에 있습니까?아니면 실행할 다른 명령이 있습니까?
"Git 내역에서 커밋된 코드를 grep(검색)하는 방법" 질문은 다음을 권장합니다.
git grep <regexp> $(git rev-list --all)
모든 분기를 포함하는 모든 커밋을 검색합니다.
또 다른 형태는 다음과 같습니다.
git rev-list --all | (
while read revision; do
git grep -F 'yourWord' $revision
done
)
이 기사에서 더 많은 예를 찾을 수 있습니다.
저는 인수 크기에 대해 불평할 정도로 충분히 큰 프로젝트에서 위의 내용을 시도했습니다. 따라서 이 문제에 부딪히면 다음과 같은 작업을 수행하십시오.
git rev-list --all | (while read rev; do git grep -e <regexp> $rev; done)
(아래 이 답변의 마지막 섹션에 있는 대안을 참조하십시오.)
원하는 경우 다음 설정을 잊지 마십시오.
# Allow Extended Regular Expressions
git config --global grep.extendedRegexp true
# Always Include Line Numbers
git config --global grep.lineNumber true
이 별칭을 사용하면 다음과 같은 이점이 있습니다.
git config --global alias.g "grep --break --heading --line-number"
2016년 8월 업데이트: R.M.이 댓글로 추천합니다.
나는 "
fatal: bad flag '->' used after filename
을 시도할 때git branch
판본오류가 다음과 관련되어 있습니다.HEAD
앨리어싱 표기법나는 그것을 a를 추가하여 해결했습니다.
sed '/->/d'
파이프 안에서, 사이에.tr
그리고xargs
명령을 실행합니다.git branch -a | tr -d \* | sed '/->/d' | xargs git grep <regexp>
즉, 다음과 같습니다.
alias grep_all="git branch -a | tr -d \* | sed '/->/d' | xargs git grep"
grep_all <regexp>
이것은 Chernjie가 제안한 해결책보다 개선된 것입니다.git rev-list --all
과잉 살상입니다.
보다 세분화된 명령은 다음과 같습니다.
# Don't use this, see above git branch -a | tr -d \* | xargs git grep <regexp>
이렇게 하면 원격 분기를 포함하여 분기만 검색할 수 있습니다.
bash/zsh 별칭을 생성할 수도 있습니다.
# Don't use this, see above alias grep_all="git branch -a | tr -d \* | xargs git grep" grep_all <regexp>
git log
특히 일치하는 항목이 많은 경우에는 모든 분기에서 텍스트를 보다 효과적으로 검색할 수 있으며, 가장 최근에 변경된 내용을 먼저 보려는 경우에는 더욱 유용합니다.
git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'
이러한 로그 명령은 지정된 검색 문자열/레거시(일반적으로)를 추가하거나 제거하는 커밋을 먼저 나열합니다.그-p
옵션을 사용하면 패턴이 추가되거나 제거된 위치에 관련 diff가 표시되므로 컨텍스트에서 패턴을 확인할 수 있습니다.
원하는 텍스트를 추가하는 관련 커밋(예: 8beff00d)을 찾았으면 커밋이 포함된 분기를 찾습니다.
git branch -a --contains 8beeff00d
저는 이것이 가장 유용하다고 생각했습니다.
git grep -i foo `git for-each-ref --format='%(refname)' refs/`
원격 분기와 로컬 분기 중 어느 쪽만 볼 것인지에 따라 마지막 인수를 조정해야 합니다.
git grep -i foo $(git for-each-ref --format='%(refname)' refs/remotes)
git grep -i foo $(git for-each-ref --format='%(refname)' refs/heads)
내가 만든 별칭은 다음과 같습니다.
grep-refs = !sh -c 'git grep "$0" "$@" "$(git for-each-ref --format=\"%(refname)\"" refs/)'
두 가지 일반적인 방법으로 이 작업을 수행할 수 있습니다.Bash 또는 Git 별칭
다음 세 가지 명령이 있습니다.
git grep-branch
로컬 및 원격의 모든 분기에서 검색git grep-branch-local
로컬 분기에서만 검색git grep-branch-remote
만 해당됨
사용법은 다음과 같습니다.
git grep-branch "find my text"
git grep-branch --some-grep-options "find my text"
GEP 사용:깃 별칭
파일 ~/.gitconfig
으로 명을수야합니에 .~/.gitconfig
파일, 유이git config --global alias
사용자가 추가한 복잡한 코드를 평가하여 엉망으로 만듭니다.
[alias]
grep-branch = "!f(){ git branch -a | sed -e 's/[ \\*]*//' | grep -v -e '\\->' | xargs git grep $@; };f "
grep-branch-remote = "!f(){ git branch -a | sed -e 's/[ \\*]*//' | grep -v -e '\\->' | grep '^remotes' | xargs git grep $@; };f"
grep-branch-local = "!f(){ git branch -a | sed -e 's/[ \\*]*//' | grep -v -e '\\->' -e '^remotes' | xargs git grep $@; };f "
참고: 별칭을 추가했지만 실행에 실패한 경우 - 백슬래시 확인\
은 추가 할 수도 .\\
bash 명령과 비교해 볼 수 있습니다.
git branch -a
분기를 합니다.sed -e 's/[ \\*]*//'
공간 자르기(부터)branch -a
*(으)로 표시됨;grep -v -e '\\->'
같은 복잡한 합니다.remotes/origin/HEAD -> origin/master
;grep '^remotes'
분기를 .grep -v -e '^remotes'
원격 분기를 제외한 분기 가져오기;
»git grep-branch-local -n getTastyCookies
-n
일치하는 줄 앞에 줄 번호를 붙입니다.
[user@pc project]$ git grep-branch-local -n getTastyCookies
dev:53:modules/factory/getters.php:function getTastyCookies($user);
master:50:modules/factory/getters.php:function getTastyCookies($user)
현재 구조는 다음과 같습니다.
:
기호
- 지점:
dev
- 번호: 라인번호:
53
- 경로: 파일경:
modules/factory/getters.php
- 라인: 일하는선치:
function getTastyCookies($user)
GEP 사용: BASH
는 Bash 명은저장합니다야해에 .sh
스크립트 또는 셸에서 실행합니다.
로컬 분기만
git branch -a | sed -e 's/[ \*]*//' | grep -v -e '\->' -e '^remotes' | xargs git grep "TEXT"
원격 분기만
git branch -a | sed -e 's/[ \*]*//' | grep -v -e '\->' | grep '^remotes' | xargs git grep "TEXT"
로컬 및 원격 지점
git branch -a | sed -e 's/[ \*]*//' | grep -v -e '\->' | xargs git grep "TEXT"
방법은 다음과 같습니다.
git for-each-ref --format='%(*refname)' | xargs git grep SEARCHTERM
을 SHA-1에 git grep
작업 복사본 대신 검색이 있습니다.
모든 분기를 검색하려면 다음과 같은 모든 트리를 얻을 수 있습니다.git rev-list --all
다 집어치워요
git grep "regexp" $(git rev-list --all)
인내심을 가지세요.
언급URL : https://stackoverflow.com/questions/15292391/is-it-possible-to-perform-a-grep-search-in-all-the-branches-of-a-git-project
'programing' 카테고리의 다른 글
워드프레스 - 절대 링크를 상대 링크로 변경하는 방법 (0) | 2023.07.15 |
---|---|
런타임 경고: numpy.dtype 크기가 변경되었습니다. 이진 비호환성을 나타낼 수 있습니다. (0) | 2023.07.15 |
그렇지 않은 경우 다음 반복으로 루프 건너뛰기 R (0) | 2023.07.15 |
git format-patch를 사용하여 커밋을 하나의 패치로 압축하는 방법은 무엇입니까? (0) | 2023.07.15 |
Excel 날짜 형식 지정 (0) | 2023.07.15 |