Dans mon référentiel, si je tape
$ git diff some-file
ou
$ git difftool some-file
J'obtiens l'affichage de différence dans le terminal. Je pense que cela ne devrait pas se produire, car j'ai mis en place un outil de diff externe, comme le montre la sortie de git config -l
:
$ git config -l
user.name=blah blah
user.email=blah blah
http.sslverify=true
diff.external=/home/daniel/bin/git-diff <--This is the important line
Push.default=simple
core.filemode=false
core.editor=gedit
alias.tree=log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)
%C(black)[%cr]%C(reset) %x09%C(black)%an: %s %C(reset)'
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.Origin.url=https://daniel@skynet/git/pyle.git
remote.Origin.fetch=+refs/heads/*:refs/remotes/Origin/*
branch.master.remote=Origin
branch.master.merge=refs/heads/master
branch.daniel.remote=Origin
branch.daniel.merge=refs/heads/daniel
Le fichier git-diff référencé dans le diff.external
la ligne ressemble à ceci
#!/bin/bash
meld $2 $5
Pourquoi git diff
invoquer la fusion?
J'obtiens le même comportement si je configure les choses pour que git config -l
a la ligne suivante:
diff.tool = meld
ou
diff.external = usr/bin/meld
Remarque : les autres référentiels sur ma machine n'ont pas ce problème.
Connexes, mais pas équivalentes, SO questions:
J'obtiens l'affichage de différence dans le terminal. Si cela ne devrait pas se produire, car j'ai mis en place un outil de diff externe
Oui, il devrait: diff.external is pour "affichage diff dans le terminal".
(de git config
page de manuel )
diff.external
Si cette variable de configuration est définie, la génération de diff n'est pas effectuée en utilisant la machinerie de diff interne, mais en utilisant la commande donnée .
Peut être remplacé par leGIT_EXTERNAL_DIFF
variable d'environnement.
La commande est appelée avec des paramètres comme décrit sous "git Diffs" dans git (1). Remarque: si vous souhaitez utiliser un programme de diff externe uniquement sur un sous-ensemble de vos fichiers, vous pouvez utiliser gitattributes (5) à la place.
La question que vous liez explique pourquoi meld
ne pourrait pas jouer le rôle de "diff externe".
Visualiser un diff visuellement avec un autre outil se fait avec:
git difftool --dir-diff shaOfHisCheckIn^!
git difftool --tool=meld --dir-diff shaOfHisCheckIn^!
git difftool -t meld -d shaOfHisCheckIn^!
meld
peut être configuré sous Windows comme un outil différent: voir " Git Diff et Meld sous Windows ".
Si vous vouliez configurer meld pour git diff, vous pourriez (sur Ubuntu) utiliser le diff.external
, mais avec un script wrapper :
créer un fichier appelé
git-diff.sh
, en utilisant le contenu suivant:
#!/bin/bash
meld "$2" "$5" > /dev/null 2>&1
Enregistrez-le dans un emplacement tel que
/usr/local/bin
, en lui donnant des droits exécutables:
$ Sudo mv git-diff.sh /usr/local/bin/
$ Sudo chmod +x /usr/local/bin/git-diff.sh
La dernière étape consiste à ouvrir votre
$HOME/.gitconfig
fichier et ajoutez les quelques lignes suivantes:
[diff]
external = /usr/local/bin/git-diff.sh
La prochaine fois que vous taperez git diff dans un projet Git avec des modifications, Meld sera lancé vous montrant un visualiseur de différences de volet divisé.
Notez que vous devez fermer l'instance ouverte de fusion avant d'ouvrir le visualiseur de différences suivant.
Il paraît que git diff
(au moins, à partir de git
version 1.7.12.4
) n'exécutera rien d'autre que le diff interne à la console uniquement sur un fichier qui est à l'état "les deux modifiés". git mergetool
fonctionne sur ces fichiers, cependant.
En général, je veux simplement vérifier si les modifications que je m'apprête à enregistrer sont correctes. J'ai donc suivi la procédure suggérée ici (similaire à celle notée par VonC). Cependant, l'exécution de git difftool
n'a toujours pas ouvert la fusion. J'ai ensuite créé un alias:
alias git-diff='git difftool $(git rev-parse HEAD)'
Enregistrez-le dans votre .bashrc ou .zshrc ou dans la configuration correspondante pour votre Shell. Cela compare essentiellement l'état de la branche avec le commit précédent sur la branche.
Fait une git-diff
pour voir les modifications fichier par fichier ou git-diff --dir
pour voir toutes les modifications dans une vue de répertoire.