4 votes

filtre git diff pour les fichiers minimisés

J'ai un fichier JSON minimisé dans mon arbre git. Il s'agit d'un ensemble de données sur une seule ligne, sans espace.

Les différences pour ce fichier ne sont pas très utiles, toute modification des données entraînant bien sûr la modification de toute la ligne.

J'aimerais pouvoir éventuellement indique à git de différencier non pas le fichier lui-même, mais la sortie d'une jolie imprimante (comme python -mjson.tool o jq . ) pour ce fichier.

Pour l'instant, j'utilise cette commande :

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

Quelle est la bonne façon de procéder ?

6voto

MikeRalphson Points 151

Je mettrais en place un git textconv pour le(s) fichier(s) concerné(s).

Dans .gitattributes, définissez l'outil de comparaison :

*.json diff=json

Et dans .git/config :

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

json_pp est présent dans la distribution Git pour Windows, et j'ai eu plus de chance avec lui qu'avec jq .

2voto

ipel Points 109

La solution la plus simple que je suis habituellement est d'avoir un code source assez imprimé, et de le minifier dans un fichier non suivi pendant la construction. c'est assez bien comme ça :

  • La source sera toujours lisible.
  • il n'y aura pas de modifications non désirées des fichiers sources

1voto

Uri Points 111

C'est ce que j'ai fait pour passer en revue une collection de .json et trouver quel(s) fichier(s) diffère(nt) :

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

si vous voulez juste voir la différence, faites ceci :

for f in `git ls-files *.json`; do
    echo $f
    (git cat-file -p :./$f | jq '.' -S) | diff - <(cat $f | jq '.' -S)
done

0voto

ognockocaten Points 218

Si vous êtes comme moi et que vous ne vous souciez pas vraiment du contenu des fichiers minimisés (parce que, vous savez, il s'agit juste de la forme minimisée d'autres changements engagés), vous pouvez faire quelque chose pour que les fichiers minimisés ne s'enroulent pas et ne prennent pas une centaine de lignes.

Essayez d'exécuter ceci : git config --global core.pager 'less -S'

Ensuite, votre fichier minimisé apparaîtra sur une ligne qui disparaîtra commodément de l'écran.

Voir aussi :

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X