2

У меня свернутый JSON-файл в моем git-дереве. Это набор данных в одну строку без пробелов.

Различия для этого файла не очень полезны, любое изменение данных, конечно, приводит к изменению всей строки.

Я хотел бы иметь возможность при желании сказать git, что нужно различать не сам файл, а вывод симпатичного принтера (например, python -mjson.tool или jq .) Для этого файла.

Прямо сейчас я использую эту команду:

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

Как правильно это сделать?

4 ответа4

2

Самое простое решение, за которым я обычно следую, - это иметь красивый печатный исходный код и минимизировать его в неотслеживаемый файл при сборке. это довольно хорошо, как:

  • Источник всегда будет читабельным.
  • не будет никаких нежелательных изменений в исходных файлах
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
1

Я бы настроил фильтр git textconv для затронутых файлов.

В .gitattributes установите инструмент diff:

*.json diff=json

И в .git/config:

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

json_pp присутствует в дистрибутиве Git for Windows, и мне повезло больше, чем с jq .

0

Если вы похожи на меня и вас не волнует содержимое свернутых файлов (потому что, знаете, просто свернутая форма других зафиксированных изменений), вы можете сделать что-то, чтобы свернутые файлы не переносились и не принимались до ста строк.

Попробуйте запустить это: git config --global core.pager 'less -S'

Затем ваш свернутый файл будет отображаться в одной строке, которая удобно исчезнет с экрана.

Смотрите также:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .