code

변경 유형별로 git diff 필터링

codestyles 2020. 8. 16. 20:21
반응형

변경 유형별로 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새 파일이나 삭제 된 파일에 대한 줄 이 남습니다 . 또한 구문 분석 할 필요가 없다면 훨씬 더 좋을 것입니다 (예를 들어 어떤 덩어리에 / ^ diff /와 일치하는 것이 있으면 실패합니다).

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

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

출력은 더 좋지만 여전히 끔찍한 느낌입니다.


당신이 찾고있는 --diff-filter=M단지 * 파일을 표시하는 M * 두 가지 사이에 odified.

에서 man git-diff

--diff-filter=[ACDMRTUXB*]

다음과 같은 파일 만 선택하십시오.

  • A 추가됨
  • C 복사 됨
  • D 삭제
  • M 수정 됨
  • R 이름이 변경됨
  • T 유형 (모드) 변경
  • U 병합 해제
  • X 알 수 없는
  • B 페어링이 끊어졌습니다.
  • * 모두 또는 없음

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

* (모두 또는 없음)을 조합에 추가하면 비교에서 다른 기준과 일치하는 파일이 있으면 모든 경로가 선택됩니다. 다른 기준과 일치하는 파일이 없으면 아무것도 선택되지 않습니다.


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

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

참조 16726cf 커밋 에 의해 (2016년 7월 14일를) Junio C 하마노 ( gitster) .
(Merged by Junio ​​C gitsterHamano -- in commit 2f8c654 , 08 Aug 2016)

diff: 문서 diff-filter제외

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

따라서 지금 (마지막으로) 문서diff-options 에는 다음이 포함됩니다.

이러한 대문자는 제외 할 수 있습니다.
예를 들어 --diff-filter=ad추가 및 삭제 된 경로를 제외합니다.


--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


저는 Notepad ++ (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'을 누르고 아무것도 찾지 못할 때까지 다시 가야합니다.

(찾은 내용을 '색인'으로 대체)

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

반응형