最小化されたファイルのgit diffフィルター


2

gitツリーに最小化されたJSONファイルがあります。これは、スペースなしの1行のデータの束です。

このファイルの差分はあまり有用ではありません。もちろん、データを変更すると、行全体が変更されます。

オプションで、gitにファイル自体ではなく、そのファイルのプリティプリンター(python -mjson.toolまたはなどjq .)の出力をdiff するように指示できるようにしたいと思います。

今、私はこのコマンドを使用しています:

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

これを行う適切な方法は何ですか?

回答:


2

私が通常従う最も簡単な解決策は、きれいに印刷されたソースコードを作成し、ビルド中に追跡されていないファイルに縮小することです。これは次のようにかなり良いです:

  • ソースは常に読み取り可能です。
  • ソースファイルに不要な変更はありません。

1

影響を受けるファイルに対してgit textconvフィルターを設定します。

.gitattributesで、diffツールを設定します。

*.json diff=json

そして.git / configで:

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

json_ppはGit for Windowsディストリビューションに存在し、私はこれよりも幸運jqでした。


1

これは、.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

0

あなたが私のような人で、最小化されたファイルの内容を実際に気にしない場合(他のコミットされた変更の最小化された形式のため)、最小化されたファイルがラップして取得しないようにすることができます100行まで。

これを実行してみてください: git config --global core.pager 'less -S'

次に、最小化されたファイルが1行に表示され、画面から消えて便利になります。

こちらもご覧ください:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.