it-source

변경 유형별 필터 git diff

criticalcode 2023. 9. 13. 22:41
반응형

변경 유형별 필터 git diff

제한할 방법이 있습니까?git diff파일을 바꾸려고요?

두 커밋의 차이점을 확인하고 싶지만, 하나 또는 다른 커밋에 존재하지 않는 경로는 제외합니다(추가/삭제).다음 Perl 원라이너는 제가 원하는 대부분의 기능을 보여줍니다.

git diff master.. | perl -lnwe 'print unless /^(new|deleted) file/../^diff/ and not /^diff/'

하지만 그것은 떠납니다.diff --git a/path b/path새로우거나 삭제된 파일의 줄을 표시합니다.또한 구문 분석할 필요가 없다면 훨씬 더 좋을 것입니다(예를 들어 어떤 hunk라도 /^diff/와 일치하는 내용을 포함하면 실패합니다).

제가 시도한 또 다른 대안은 다음과 같습니다.

git diff --name-status (args) | perl -lnwe 'print if s/^M\s+//' | xargs git diff (args) --

그것의 출력은 더 좋지만, 여전히 딱딱하게 느껴집니다.

당신은 찾고 있습니다.--diff-filter=M두 분기 사이에 수정된 파일만 표시합니다.

부터man git-diff

--diff-filter=[ACDMRTUXB*]

다음 파일만 선택합니다.

  • A추가된
  • C복사됨
  • D삭제됨
  • M수정된
  • R이름 바꿈
  • T유형(모드)을 변경합니다.
  • U병합되지 않음
  • X알 수 없는
  • B그들의 짝이 깨졌습니다.
  • *모두 또는 모두

필터 문자 조합을 모두 사용할 수 있습니다.

언제*(All-or-none)이 조합에 추가되고, 비교에서 다른 기준과 일치하는 파일이 있으면 모든 경로가 선택되고, 다른 기준과 일치하는 파일이 없으면 아무것도 선택되지 않습니다.

또한 이러한 대문자는 제외하기 위해 내림차순으로 지정할 수 있습니다.예.--diff-filter=ad추가된 경로와 삭제된 경로는 제외됩니다.

Git 2.10(2016년 3분기)이 상기시켜 주듯, "추가/삭제된 파일을 제외한 모든 것을 보여 주는" 더 쉬운 방법이 있습니다(실제로 Git 1.8.5, 2013년 7월 이후).

 git diff --diff-filter=ad master..

주니오 C 하마노()gitster의 커밋 16726cf (2016년 7월 14일) 참조.
(2016년 8월 8일 주니오 C 하마노 ---- 커밋 2f8c654에 합병)

diff: 서류를diff-filter배격

v1.8.5일에서 7f2ea5f(:diff 소문자가 어떤 변경 클래스를 제외할지 지정할 수 있도록 허용, 2013-07-17)는 "" 메커니즘에서 --diff-filter소문자를 제외로 받아들이도록 가르쳤지만 문서화하는 것을 잊었습니다.

따라서 현재(최종) 문서에는 다음과 같은 내용이 포함됩니다.

이 대문자들은 제외하기 위해 내림차순으로 내릴 수 있습니다.
예.--diff-filter=ad추가된 경로와 삭제된 경로는 제외됩니다.

Git 2.36 (2022년 2분기) 꼭 사용하세요.

--diff-filter 플래그를 사용하여 이 작업을 정확하게 수행할 수 있습니다.git diff --diff-filter=CMRTUXB master..추가/삭제된 파일을 제외한 모든 것을 표시해야 합니다.

사용할 수 있는 수정된 파일과 새 파일을 모두 보려면 다음과 같이 하십시오.

git diff --name-only --diff-filter=ACMR PREV_VERSION master

PREV_VERSION첫 번째 커밋의 해시입니다.

zip으로 내보내기 위해서는 이 코드를 사용할 수 있습니다.

git archive --output=export.zip HEAD $(git diff --name-only --diff-filter=ACMR PREV_VERSION HEAD)

:.gitignore에 없습니다export.zip

메모장++(Windows)와 이러한 정규 표현식을 사용하여 diff 파일에서 확장자 유형 및 특정 경로를 필터링했습니다.

^Index.*\.(dll|pdb|exe|txt|zip|log|ism|resx|tlog|htm|lib)$[\s\S.]*?^Index
^Index: Shared/.+$[\s\S.]*?^Index
^Index: Next/source/Utility/.+$[\s\S.]*?^Index

유일한 문제는, 그것이 끝에 다다를 때입니다.'ctrl+home'을 하고 아무것도 발견되지 않을 때까지 다시 가셔야 합니다.

(검색한 내용을 'Index'로 바꿉니다)

언급URL : https://stackoverflow.com/questions/6879501/filter-git-diff-by-type-of-change

반응형