A solução mais simples que eu costumo seguir é ter um código-fonte bem impresso e minificá-lo em um arquivo não rastreado durante a criação. isso é muito bom como:
- a fonte será sempre legível.
- não haverá alterações indesejadas nos arquivos de origem
Eu tenho um arquivo JSON minimizado na minha árvore git. É um monte de dados em uma única linha, sem espaços.
Diferenças para este arquivo não são muito úteis, qualquer mudança nos dados, é claro, resulta em toda a linha sendo alterada.
Eu gostaria de poder opcionalmente dizer ao git para não diferenciar o arquivo em si, mas a saída de uma impressora bonita (como python -mjson.tool ou jq . ) para esse arquivo. / p>
Agora mesmo estou usando este comando:
diff -u <(git show HEAD:file.json | jq .) <(jq . < file.json)
Qual é a maneira correta de fazer isso?
A solução mais simples que eu costumo seguir é ter um código-fonte bem impresso e minificá-lo em um arquivo não rastreado durante a criação. isso é muito bom como:
Eu configuraria um filtro textconv para o (s) arquivo (s) afetado (s).
Em .gitattributes, defina a ferramenta de comparação:
*.json diff=json
E em .git / config:
[diff "json"]
textconv = "cat $1 | json_pp"
json_pp está presente na distribuição do Git para Windows, e eu tive mais sorte com isso do que com jq .
Isso é o que fiz para passar por cima de uma coleção de .json arquivos e descobrir quais arquivos diferem:
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
se você quiser apenas ver o diff, faça o seguinte:
for f in 'git ls-files *.json'; do
echo $f
(git cat-file -p :./$f | jq '.' -S) | diff - <(cat $f | jq '.' -S)
done
Se você é como eu e não se importa com o conteúdo dos arquivos minimizados (porque, sabe, apenas minimizou a forma de outras alterações confirmadas), você pode fazer algo para que os arquivos minimizados não embrulhe e leve cem linhas.
Tente executar isto: git config --global core.pager 'less -S'
Em seguida, seu arquivo minimizado será exibido em uma linha que desaparece convenientemente da tela.
Veja também:
Tags git