최소화 된 파일을위한 git diff 필터 있습니다. 공백없이 한 줄에있는

내 자식 트리에 최소화 된 JSON 파일이 있습니다. 공백없이 한 줄에있는 많은 데이터입니다.

이 파일의 차이는 그다지 유용하지 않습니다. 데이터를 변경하면 물론 전체 줄이 변경됩니다.

선택적으로 git에게 파일 자체가 아니라 그 파일에 대한 예쁜 프린터 ( python -mjson.tool또는 같은 jq .)의 출력을 diff 하도록 지시하고 싶습니다 .

지금 나는이 명령을 사용하고 있습니다 :

diff -u <(git show HEAD:file.json | jq .) <(jq . < file.json)

이를 수행하는 올바른 방법은 무엇입니까?



답변

내가 일반적으로 따르는 가장 간단한 해결책은 꽤 인쇄 된 소스 코드를 가지고 빌드하는 동안 추적되지 않은 파일로 축소하는 것입니다. 이것은 다음과 같이 꽤 좋습니다.

  • 소스는 항상 읽을 수 있습니다.
  • 소스 파일에 원치 않는 변경 사항이 없습니다

답변

영향을받는 파일에 git textconv 필터를 설정합니다 .

.gitattributes에서 diff 도구를 설정하십시오.

*.json diff=json

그리고 .git / config에서 :

[diff "json"]
    textconv = "cat $1 | json_pp"

json_pp는 Git for Windows 배포판에 있으며, 이것보다 더 운이 좋았습니다 jq.


답변

이것은 .json파일 모음을 살펴보고 어떤 파일이 다른지 찾기 위해 수행 한 작업입니다 .

for f in `git ls-files *.json`; do
    if  ! (git cat-file -p :./$f | jq '.' -S) | cmp -s - <(cat $f | jq '.' -S); then
        echo $f
    fi
done

diff 만보고 싶다면 다음과 같이하십시오.

for f in `git ls-files *.json`; do
    echo $f
    (git cat-file -p :./$f | jq '.' -S) | diff - <(cat $f | jq '.' -S)
done


답변

당신이 나와 같고 실제로 최소화 된 파일의 내용에 관심이 없다면 (약간의 다른 커밋 된 변경 사항을 최소화하기 때문에) 최소화 된 파일이 줄 바꿈되지 않도록 무언가를 할 수 있습니다 백 줄까지.

이것을 실행하십시오 : git config --global core.pager 'less -S'

그러면 최소화 된 파일이 한 줄에 나타나 화면에서 사라집니다.

참조 :

https://stackoverflow.com/a/6697519/1483861

https://superuser.com/a/272826/454133


답변