![最小化文件的 git diff 过滤器](https://linux22.com/image/1392676/%E6%9C%80%E5%B0%8F%E5%8C%96%E6%96%87%E4%BB%B6%E7%9A%84%20git%20diff%20%E8%BF%87%E6%BB%A4%E5%99%A8.png)
我的 git 树中有一个最小化的 JSON 文件。它是一行上的一堆数据,没有空格。
这个文件的差异不是很有用,数据中的任何变化当然都会导致整行被改变。
我希望能够可选地告诉 git 比较的不是文件本身,而是该文件的漂亮打印机(如python -mjson.tool
或)的输出。jq .
现在我正在使用这个命令:
diff -u <(git show HEAD:file.json | jq .) <(jq . < file.json)
正确的做法是什么?
答案1
我会建立一个 git文本转换过滤受影响的文件。
在.gitattributes中,设置diff工具:
*.json diff=json
在 .git/config 中:
[diff "json"]
textconv = "cat $1 | json_pp"
json_pp
存在于 Git for Windows 发行版中,而且我对它的运气比 更好jq
。
答案2
我通常遵循的最简单的解决方案是拥有一个漂亮的打印源代码,并在构建时将其最小化为未跟踪的文件。这非常好:
- 源将始终可读。
- 源文件不会发生任何不必要的更改
答案3
这是我检查.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
如果你只是想看看差异,请执行以下操作:
for f in `git ls-files *.json`; do
echo $f
(git cat-file -p :./$f | jq '.' -S) | diff - <(cat $f | jq '.' -S)
done
答案4
如果您像我一样,实际上并不关心最小化文件的内容(因为,您知道,这只是其他已提交更改的最小化形式),那么您可以采取一些措施,以使最小化文件不会换行并占用一百行。
尝试运行这个:git config --global core.pager 'less -S'
然后,最小化的文件将显示在一行上,并方便地消失在屏幕上。
也可以看看: