내 자식 트리에 최소화 된 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'
그러면 최소화 된 파일이 한 줄에 나타나 화면에서 사라집니다.
참조 :