最小化文件的 git diff 过滤器

最小化文件的 git diff 过滤器

我的 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'

然后,最小化的文件将显示在一行上,并方便地消失在屏幕上。

也可以看看:

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

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

相关内容