답변:
textconv
파일 유형에 대한 구성 옵션을 설정할 수 있습니다 . gitattributes (5)의 "이진 파일의 텍스트 차이 수행"을 참조하십시오 . 사용해야 할 것은 파일 유형에 따라 다릅니다.
예 1 :
zip 파일의 내용을 비교하고 싶다고 가정 해보십시오. 이 경우 $ GIT_DIR / config 파일 또는 $ HOME / .gitconfig에 다음을 입력해야합니다.
[diff "zip"]
textconv = unzip -v
다음에 저장소의 zip 파일에서 diff를 요청 unzip -v
하면 버전이 모두 호출 되고 결과 텍스트가 달라집니다.
예 2 :
pdf 파일의 경우 예를 들어 pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
예 3 :
파일 유형에 대한 특정 정보 유틸리티가없는 경우 다음을 사용할 수 있습니다 hexdump
(Linux에서도 사용 가능한 FreeBSD 및 OSX와 함께 제공).
[diff "bin"]
textconv = hexdump -v -C
롤랜드 스미스의 답변은 도움이되었지만 현재는 불완전합니다 (주석 참조). 여기에는 두 부분이 있습니다.
리포지토리 .git/config
파일 또는 개인 전역 ~/.gitconfig
파일에 새 diff 명령을 정의 할 수 있습니다 ( 예 hexdump
: 다음을 사용하는 hex diff 명령) .
[diff "hex"]
textconv = hexdump -v -C
binary = true
다음으로 저장소의 .gitattributes
파일 을 사용하여 git에게이 특별한 diff 명령에 어떤 파일을 사용해야하는지 알려야합니다.
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
.gitignore
파일 과 마찬가지로 파일을 .gitattributes
리포지토리에 체크인해야합니다.
내 경우에는 바이너리로 취급하려는 여러 가지 파일 확장자가 있습니다 (예 : Windows에서 git을 사용하는 경우 줄 끝 변환을 피하십시오) hexdump
.
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
이미지 파일과 함께 사용할 hexdump diff 명령을 정의하는 다른 예 는 https://github.com/resin-io/etcher/pull/1367 도 참조 하십시오 .
.gitattributes
전역을 설정할 수도 있습니다 ( [diff]
global 항목 과 함께 .gitconfig
). .gitattributes
로컬을 리포지토리로 만들면 .gitconfig
보안상의 이유로 원격지로 푸시되지 않기 때문에 사용자는 로컬 리포지토리 설정 을 수정 해야합니다. 어느 쪽이든, 각 사용자는이 동작을 가능하게하기 위해 어떻게 든 로컬 파일 / 구성을 업데이트해야합니다. 에서 .gitconfig
아래 [core]
추가 attributesfile = c:/users/<username>/.gitattributes
하여 어디든지 당신이 그것을 글로벌 (심지어 창에서 forwardslashes주의) 할 경우를 저장할.
위의 방법은 포괄적 인 방법입니다. 그러나 몇 개의 파일에 대해 필요한 경우 다음 방법을 사용합니다.
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
여기서는 사용하고 vimdiff
있지만 다른 도구를 사용할 수 있습니다. 이 작업을 반복해서 반복해야하는 경우 위의 내용을 작은 스크립트로 결합 할 수도 있습니다.