development

"git diff"에서 파일을 제외하고 싶습니다

big-blog 2020. 5. 12. 19:05
반응형

"git diff"에서 파일을 제외하고 싶습니다


db/irrelevant.phpGit diff에서 파일 ( ) 을 제외하려고합니다 . line db이라는 서브 디렉토리에 파일을 넣으려고 시도하고 포함 이라는 파일을 작성하려고 시도했습니다 ..gitattributesirrelevant.php -diff.git/info/attributesdb/irrelevant.php

모든 경우에 db/irrelevant.php파일은 Git 바이너리 패치로 diff에 포함됩니다. 내가 원하는 것은 diff 명령으로 해당 파일의 변경 사항을 무시하는 것입니다. 내가 무엇을 잘못하고 있지?


세상에, 드라이버와 awk가 파일을 제외할까요? 자식 1.9 이후로 할 수있는 것 :

git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'

아, 우아! 인용 된 답변을 참조하고 @torek 의이 답변대한 자세한 내용


op 명령없이 사용자 정의 diff 드라이버를 설정하고 무시해야하는 파일에 할당 할 수 있습니다.

이 명령 으로 저장소 특정 diff 드라이버작성하십시오.

git config diff.nodiff.command /bin/true

또는 모든 당신의 repos에 대한 --global.

(경우 /bin/true, 맥 OS에 존재하지 않는 대안을 사용하는 것 /usr/bin/true또는 echo).

그런 다음 파일 에서 무시하려는 파일에 새 diff 드라이버를 할당.git/info/attributes 하십시오.

irrelevant.php    diff=nodiff

이 상태가 다른 개발자 와 공유되어야한다면 , 문서 파일이나 다른 것을 통해 동료 .gitattributes대신 명령을 사용하여 동료 .git/info/attributes와 공유 할 수 있습니다 git config.


당신은 또한 사용할 수 있습니다 filterdiff 의 프로그램 patchutils의 DIFF의 일부를 제외하는 프로그램 모음. 예를 들면 다음과 같습니다.

git diff | filterdiff -p 1 -x db/irrelevant.php

이 방법은 허용되는 답변보다 짧습니다.

git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'

다른 포함 / 제외 가능성에 대한 자세한 내용은 이 다른 게시물을 참조하십시오.


이 단선 솔루션에는 다른 유틸리티 / 다운로드가 필요하지 않습니다.

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`

file/to/exclude.txt물론 제외하려는 파일의 이름은 어디에 있습니까 ?

편집 : diff를 깨는 삭제 된 파일을 수정 한 신용 ksenzee .


내가해야 할 일에 대해 KurzedMetal의 정말 좋은 대답 은 파일이 변경되었음을 알 수 있지만 내 경우에는 커질 수있는 diff를 생성 할 수 없었습니다.

그러나 내 동료가 훨씬 간단하고 나를 위해 일한 접근법을 제안했습니다.

.gitattributes무시할 파일이있는 디렉토리에 파일을 추가 git diff하면 다음 내용이 포함됩니다.

file-not-to-diff.bin -diff

그래도 git status파일이 변경되면 "볼" 수 있습니다 . git diff또한 파일이 변경되었음을 "참조"하지만을 생성하지는 않습니다 diff.

.bin예에서 파일의 확장자는 고의적이었다. 이진 파일에 대한 git의 기본 동작이며으로 특별한 처리가 필요하지 않습니다 .gitattributes. 그러나 필자의 경우이 파일은 git 및 "file"유틸리티에서 텍스트 파일로 인식되어 트릭을 수행했습니다.


Ben Roux의 솔루션 과 유사 하지만 어쨌든 공유 :

git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff

또는 변경 사항이 이미 로컬로 커밋 된 경우 :

git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master

예 :

git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff origin/master

git diff --name-only origin/master | grep -v docs | xargs git diff origin/master

매우 간단합니다. 표준 유닉스 명령을 사용하여 원하는 것을 제외시킬 수 있습니다.이 명령은 Windows 환경에서도 git bash에서 사용할 수 있습니다. 아래 예제는 pom.xml 파일에 대해 diff를 제외하고, 먼저 파일 이름에 대해서만 diff를 마스터로 확인한 다음 'grep -v'제외 파일을 사용하여 원하지 않는 파일을 제외하고 다시 preffpred 목록으로 마스터에 diff를 실행하는 방법을 보여줍니다.

git diff master `git diff --name-only master | grep -v pom.xml`

나는 다음을한다 :

git add *pattern_to_exclude*
git diff
git reset HEAD .

나는 그것이 우아한 해결책이 아니라는 것을 알고 때로는 때로는 캐럿을 사용할 수 있지만 (예 : 이미 준비가되어있는 경우) 복잡한 명령을 입력하지 않고도 트릭을 수행합니다.


diff를 육안으로 검사하기 위해이 작업을 수행하려면 Meld 와 같은 시각적 diff 도구를 사용하면 기억하기 쉬운 짧은 명령으로 수행 할 수 있습니다.

먼저 diff 도구를 설정하지 않았다면 설정하십시오.

$ git config --global diff.tool = meld

Then, you can run a directory diff.

$ git difftool --dir-diff

You'll be able to browse diffs (by file) in Meld (or your tool of choice). Simply don't open the file you want to ignore.


Relative to the git root directory

git diff accepts an optional exclude

git diff -- ":(exclude)thingToExclude"

You might want to add some wild cards

git diff -- ":(exclude)*/thingToExclude/*"

Target specific file types

git diff -- ":(exclude)*/$1/*.png"

Or drop a little script for your dotfiles

Such as .bash_profile or .zshrc

gde() {
    # git diff exclude files or folders 
    # usage: 
    # gde fileOrFolderNameToExclude
    git diff -- ":(exclude)*/$1/*"
}

참고URL : https://stackoverflow.com/questions/10415100/want-to-exclude-file-from-git-diff

반응형