Utiliser l'outil de diff personnalisé avec ' git show`

avec git je peux définir un outil de diff personnalisé qui est utilisé pour certaines extensions de fichiers par les suivants dans .git/config

[diff "csv_diff"]
    command = Tools/csv_diff

et ce dans .gitattributes (à la racine du référentiel)

*.csv diff=csv_diff

cela fonctionne avec git diff, mais il ne fonctionne pas avec git show. Ma question est, comment puis-je utiliser un outil personnalisé avec

3 ответов

on dirait que vous êtes à la recherche pour le --ext-diff option.

Ici git show docs dire à ce sujet:

-- ext-diff

permet l'exécution d'un helper diff externe. Si vous définissez un externe diff pilote gitattributes, vous devez utiliser cette option avec git-log et amis.

25
répondu Lucas Trzesniewski 2016-01-22 00:13:17
la source

comme @LucasTrzesniewski l'a dit, Vous pouvez utiliser --ext-diff à partir de la ligne de commande pour définir un diff pour la session en cours.

vous pouvez aussi utiliser le .gitattributes pour régler le git-diff perfile.

Un git diff mise en œuvre existe en 2 parties:

  • définition $GIT_DIR/config ou $HOME/.gitconfig
  • Un lien entre un fichier et une définition dans gitattributes

Git a choisi pour cette conception de séparer les code exécutable à partir du code source, cela rend impossible pour un git clone ou toute autre commande git pour exécuter un code nuisible.

Rédaction d'une définition

Pour écrire une définition, nous commençons avec un en-tête composé de [diff "namehere"], puis suivi par un saut de ligne.

La ligne suivante consiste en la définition de commande, cette ligne est comme suit: command = commandlinehere. Cette commande est alors appelée avec 7 arguments si elle est exécutée, ceux-ci sont documentés pour GIT_EXTERNAL_DIFF environnement vriable dans les docs.

GIT_EXTERNAL_DIFF Lorsque la variable D'environnement GIT_EXTERNAL_DIFF est set, le programme nommé par it est appelé, au lieu de l'invocation diff décrit ci-dessus. Pour un chemin qui est ajouté, supprimé ou modifié, GIT_EXTERNAL_DIFF est appelé avec 7 Paramètres:

path old-file old-hex old-mode new-file new-hex new-mode where:

fichier sont des fichiers que GIT_EXTERNAL_DIFF peut utiliser pour lire contenu de ,

hex sont les 40 hexdigit hachages SHA-1

- sont la représentation octale du fichier modes.

les paramètres du fichier peuvent pointer vers le fichier de travail de l'utilisateur (par ex. nouveau fichier dans "git-diff-files"), /dev/null (par exemple, vieux-lorsqu'un nouveau fichier le fichier est ajouté), ou un fichier temporaire (ex: ancien fichier dans l'index). GIT_EXTERNAL_DIFF ne devrait pas s'inquiéter de déverrouiller le fichier temporaire, il est supprimé lorsque GIT_EXTERNAL_DIFF sorties.

Pour un chemin d'accès qui est désinstallé, GIT_EXTERNAL_DIFF est appelé avec 1 paramètre, .

Pour chaque chemin d'accès GIT_EXTERNAL_DIFF s'appelle, deux variables d'environnement, GIT_DIFF_PATH_COUNTER et GIT_DIFF_PATH_TOTAL sont définies.

L'exemple total ressemble à ceci:

[diff "jcdiff"]
command = j-c-diff

l'Écriture de la gitattributes

nous devons modifier nos gitattributes pour utiliser notre pilote personnalisé. Le fichier gitattributes se compose d'une syntaxe similaire à filename value [value2 [value3 [value4 [...]]]].

Exemples:

*           diff=jcdiff

nous devons utiliser notre diff git personnalisé pour chaque fichier.

*.java      diff=javadiff
*.python    diff=pythondiff

utilisez javadiff pour les fichiers java, pythondiff pour les fichiers python.

*           diff=globaldiff
*.java      diff=javadiff

utilisez javadiff pour les fichiers java, globaldiff pour les fichiers restants.

configurer git pour définir automatiquement --ext-diff

vous pouvez ajouter un alias en utilisant git config alias.showobject 'show --ext-diff' pour définir une nouvelle commande appelée git showobject qui utilise automatiquement notre filtre.

6
répondu Ferrybig 2016-01-28 11:14:28
la source

comme réponse alternative pour les autres à la recherche d'un outil de diff comme meldgit show

git difftool --tool=meld HEAD~..HEAD

la plupart du temps, j'aime voir mes petits diffs sur la ligne de commande parce que c'est rapide, mais de temps en temps je veux démarrer un outil de diff pour inspecter les choses un peu plus en profondeur - surtout avec le travail des autres. Mais ce qui exclut la possibilité d'utiliser .gitattributes parce que ce serait alors le comportement par défaut.

afin de montrer un particulier commit ou branche, alors j'ai créé ce pseudonyme dans mon ~/.gitconfig

[alias]
    showm = "!f(){ if [ -z  ]; then c='HEAD'; else c=; fi; git difftool --tool=meld -y $c~..$c; }; f"

lancement de fusionner pour montrer les différences introduites par qui s'engagent:

git showm <branch or hash>

sans argument, il utilisera HEAD par défaut:

git showm

en bonus, vous pouvez suivre cela avec un alias bash pour obtenir l'achèvement des onglets pour les noms de branches en ajoutant ceci à la ~/.bashrc

alias showm='git showm'
__git_complete showm _git_show
1
répondu Jeff Puckett 2016-09-14 02:01:41
la source

Autres questions sur