git diff를 grep하는 방법?
주어진 패턴으로 필터링 된 git-diff를 표시하는 방법이 있습니까?
같은 것
git grepdiff pattern
changed file
+++ some sentence with pattern
changed file 2
--- some other pattern
불행히도 가장 간단한 해결책으로는 충분하지 않습니다
git diff | grep pattern
+++ some sentence with pattern
--- some other pattern
# not an option as doesn't put the filename close to the match
awk를 사용하여 해결 방법을 찾았습니다.
git diff | awk "/\+\+\+/{f = \$2}; /PATTERN/ {print f \$0} "
그러나 이것에 대한 명령이 있음을 알고 싶습니다.
확실하지 않지만 git diff -G <regex>
플래그가 괜찮지 않습니까?
-G <정규식>
Look for differences whose added or removed line matches the given <regex>.
또 다른 가능성은 전체 diff를보고 일반 less
명령 (입력 /
한 다음 패턴)을 사용하여 출력을 검색하는 것 입니다.
를 less
사용하여 경기 전에 몇 줄을 표시하도록 구성한 --jump-target=N
경우 이것은 매우 유용합니다. 다음과 같이 시도하십시오.
PAGER="/usr/bin/less --jump-target=10" git diff
즉, 일치 항목이 10 행에 표시되어야하며 (위에 9 행의 컨텍스트가 표시됨) 파일 이름도 볼 수있을만큼 충분할 수 있습니다.
예 --jump-target=.5
를 사용 하여 화면 중앙에 일치 위치를 지정할 수도 있습니다 .
git diff -S<string>
또는 시도 했습니까 git diff -G".*string.*"
? 동일하지 않다는 점에 유의하십시오 . -S가 수행하는 작업 은 곡괭이에 대한 설명서를 참조하십시오 .
나는 git log -p
덜 열리는 (그러나 구성 가능)을 사용하며, 차례로 /. 또한 git log -S <searchword>
.
"grep" diff
출력에 대한 접근 방식 이 최선의 해결 방법 이라고 생각합니다 .
sed를 사용하여 awk 스크립트를 개선 할 수 있습니다.
colored="(^[\[[0-9;]*[a-zA-Z])"
marker="^$colored+diff"
pattern="^$colored+.*(\+|\-).*PATTERN"
git diff --color | sed -rn -e "/$marker/! H; /$marker/ ba; $ ba; b; :a; x; /$pattern/ p"
colored
: 터미널 컬러 라인과 일치하는 정규식marker
: differentsdiff
덩어리의 구분과 일치하는 마커 , "diff"로 시작하는 줄pattern
: 검색 할 패턴, "+"또는 "-"로 시작하고 "PATTERN"을 포함하는 줄
이렇게하면 PATTERN이 추가되거나 제거 된 전체 diff 덩어리가 인쇄되고 유용한 컬러 출력도 유지됩니다.
주의 ^[
의는 colored
문자 그대로, 실제이어야한다 ^[
. Ctrl+ V, Ctrl+ 를 눌러 bash에서 입력 할 수 있습니다.[
다음은 내부 변경 사항 (컨텍스트 제외)을 허용하는 사용자 정의 diff 도구입니다.
용법
GIT_EXTERNAL_DIFF="mydiff --grep foo" git diff
이렇게하면 변경 내용에 포함 된 행이 출력됩니다 foo
( foo
변경 사항으로 인해 사라진 행 포함 ). 대신 모든 grep 패턴을 사용할 수 있습니다 foo
.
각 출력 줄은 다음 접두사로 시작합니다.
filename: oldlinenum: newlinenum|
이 스크립트는 --grep
옵션 없이도 사용할 수 있습니다 .이 경우 위에서 설명한대로 전체 diff 형식 (즉, 전체 컨텍스트 제공)을 지정합니다.
mydiff
#!/bin/bash
my_diff()
{
diff --old-line-format="$1"':%6dn: |-%L' \
--new-line-format="$1"': :%6dn|+%L' \
--unchanged-line-format="$1"':%6dn:%6dn| %L' \
$2 $3
}
if [[ $1 == '--grep' ]]
then
pattern="$2"
shift 2
my_diff "$1" "$2" "$5"|grep --color=never '^[^|]\+|[-+].\+'"$pattern"'.*'
else
my_diff "$1" "$2" "$5"
fi
exit 0
Windows에서 간단한 솔루션은 다음과 같습니다.
git diff -U0 | findstr string
If you want grouping by filename, use this
FOR /F "usebackq delims==" %i IN (`git diff --name-only`) do git diff -U0 %~fi | findstr string
This did the job for me, I hope it will help someone:
git diff | grep -P '^\+|^\-'
참고URL : https://stackoverflow.com/questions/12462538/how-to-grep-the-git-diff
'Programing' 카테고리의 다른 글
Gradle에서 컴파일 시간 * 전용 * 클래스 경로를 어떻게 정의합니까? (0) | 2020.11.28 |
---|---|
"."뒤의 문자열 부분을 제거합니다. (0) | 2020.11.28 |
스택에 너무 많은 공간이 할당 된 이유는 무엇입니까? (0) | 2020.11.28 |
Ember.Application 등록 및 주입 방법을 언제 어떻게 사용합니까? (0) | 2020.11.28 |
앤티 앨리어싱을 유지하면서 선명한 가장자리로 svg 요소를 렌더링하는 방법은 무엇입니까? (0) | 2020.11.28 |