Git Diff avec Beyond Compare


111

J'ai réussi à faire démarrer par git Beyond Compare 3 en tant qu'outil de comparaison, cependant, lorsque je fais une comparaison, le fichier avec lequel je compare n'est pas chargé. Seule la dernière version du fichier est chargée et rien d'autre, il n'y a donc rien dans le volet droit de Beyond Compare.

J'utilise git 1.6.3.1 avec Cygwin avec Beyond Compare 3. J'ai configuré au-delà de la comparaison comme ils le suggèrent dans la partie support de leur site Web avec un script comme celui-ci:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"path_to_bc3_executable" "$2" "$5" | cat

Quelqu'un d'autre a-t-il rencontré ce problème et connaît-il une solution?

Edit:
J'ai suivi les suggestions de VonC mais j'ai toujours exactement le même problème qu'avant. Je suis un peu nouveau sur Git, donc peut-être que je n'utilise pas le diff correctement.

Par exemple, j'essaie de voir le diff sur un fichier avec une commande comme celle-ci:
git diff main.css

Beyond Compare s'ouvrira alors et affichera uniquement mon main.css actuel dans le volet gauche, il n'y a rien dans le volet droit. Je voudrais voir mon main.css actuel dans le volet de gauche par rapport au HEAD, essentiellement ce que j'ai commis pour la dernière fois.

Mon git-diff-wrapper.sh ressemble à ceci:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

Ma configuration git ressemble à ceci pour Diff:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

Réponses:


140

Je n'utilise pas de fichiers .sh wrapper supplémentaires. Mon environnement est Windows XP, git 1.7.1 sur cygwin et Beyond Compare 3. Voici mon fichier .git / config .

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

Ensuite, j'utilise $ git difftool pour comparer et $ git mergetool pour fusionner.

À propos de trustExitCode : pour une commande de fusion personnalisée, spécifiez si le code de sortie de la commande de fusion peut être utilisé pour déterminer si la fusion a réussi. Si ce n'est pas défini sur true, l'horodatage du fichier cible de fusion est vérifié et la fusion est supposée avoir réussi si le fichier a été mis à jour, sinon l'utilisateur est invité à indiquer le succès de la fusion.


12
J'exécute sous Windows 7 avec un shell mingw git. J'ai dû utiliser un chemin de style Linux au /c/program fileslieu de c:/program files. Aussi j'ai enlevé le "$(cygpath -w $LOCAL)"et juste utilisé "$LOCAL". Cela semblait faire l'affaire.
Landon Poch

5
Comme @pClass le mentionne ci-dessous, "bc3" est maintenant un outil interne dans les nouvelles versions de git. Vous devez utiliser un nom unique, tel que "Beyondcompare3"
Scott Wegner

4
GitHub Shell (sur Windows 8) me l'a dit bcompare: command not found- jusqu'à ce que je change le NOM de l'outil bc3en quelque chose d'autre (comme abc3). Je suppose que certains paramètres internes de Github ont interféré. De plus, j'ai retiré la "$(cygpath -w $LOCAL)"pièce et l' ai remplacée par "$LOCAL". Maintenant, cela fonctionne très bien. Merci!
Felix Alcala

1
C'était bogué pour moi lorsque je regardais les différences entre deux commits. Voici une meilleure solution: blog.kifaru.be/2011/07/…
balajimc55

2
J'ai aussi trouvé cet article: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham

28

Merci à @dahlbyk , l'auteur de Posh-Git , pour avoir publié sa configuration en tant qu'essentiel . Cela m'a aidé à résoudre mon problème de configuration.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool

J'ai essayé cette réponse et je n'ai pas pu faire de différence, peut-être que je le fais mal.
Epu

1
@Epu avez-vous confirmé que vos chemins sont les mêmes sur votre machine? Et c'est Beyond Compare 3, pas une ancienne v2 ou quelque chose?
Nick Josevski

J'ai confirmé que les chemins sont les mêmes et que c'est bc3.
Epu

1
Ce qui est drôle, c'est que «git difftool file.txt» et «git mergetool file.txt» fonctionnent bien, alors je suis passé à ceux-ci. Mais 'git diff file.txt' est maintenant cassé (avant qu'il ne me montre le diff de console par défaut). Maintenant, cela me donne une `` erreur: impossible de générer bc3: aucun fichier ou répertoire \ nexternal diff est mort, s'arrêtant à file.txt ''
Epu

Juste au cas où quelqu'un serait confronté au même problème que moi (.gitconfig non reconnu après l'avoir édité), j'ai dû ajouter le chemin comme suit:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

Exécutez ces commandes pour Beyond Compare 2:

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Exécutez ces commandes pour Beyond Compare 3:

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Ensuite, utilisez git difftool


1
Beyond Compare 4 est-il pris en charge?
Danijel

2
@Danijel, le doc officiel déclaré dans @Daniel Magnussons répond aux étatsNote: Use bc3 on the command line for both BC version 3 and 4
BNT


6

Voici mon fichier de configuration. Il a fallu un peu de lutte mais maintenant ça marche. J'utilise Windows Server, msysgit et au-delà de comparer 3 (apparemment une version x86). Vous remarquerez que je n'ai pas besoin de spécifier d'arguments et que j'utilise "path" au lieu de "cmd".

[user]
        name = PeteW
        email = petew@petew.com
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool

4

La page d'assistance de Beyond Compare est un peu brève.

Vérifier ma réponse externe différente pour plus (concernant la syntaxe exacte)

Extrait:

$ git config --global diff.external <path_to_wrapper_script>

à l'invite de commande, en remplaçant par le chemin vers " git-diff-wrapper.sh", donc votre ~/.gitconfigcontient

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

Assurez-vous d'utiliser la syntaxe correcte pour spécifier les chemins vers le script wrapper et l'outil de comparaison, c'est-à-dire utilisez des barres obliques avant au lieu des barres obliques inverses. Dans mon cas, j'ai

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

dans .gitconfiget

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

dans le script wrapper.


Remarque: vous pouvez également utiliser git difftool.



3

Veuillez noter que vous faites un mauvais chemin de 2 $. car vous êtes sous Cygwin mais pas BC3, vous devez donc lui spécifier un chemin complet. comme "d: / cygwin $ 2"

Veuillez consulter mon git-diff-wrapper.sh ici:

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"

Bonne chance.


3
Vous devriez vraiment utiliser cygpath pour cela; par exemple bcompare.exe $(cygpath -w $2). À votre santé.
Dan Molding

3

Si vous exécutez Windows 7 (professionnel) et Git pour Windows (v 2.15 ou supérieur), vous pouvez simplement exécuter la commande ci-dessous pour découvrir quels sont les différents outils de diff pris en charge par votre Git pour Windows

git difftool --tool-help

Vous verrez une sortie similaire à celle-ci

git difftool --tool = 'peut être défini sur l'un des éléments suivants:
vimdiff vimdiff2 vimdiff3

cela signifie que votre git ne prend pas en charge (ne peut pas trouver) au-delà de la comparaison en tant que difftool pour le moment.

Pour que Git trouve au-delà de la comparaison en tant qu'outil de comparaison valide, vous devez avoir le répertoire d'installation Beyond Compare dans votre variable d'environnement de chemin système . Vous pouvez vérifier cela en exécutant bcompare depuis le shell (cmd, git bash ou powershell. J'utilise Git Bash). Si Beyond Compare ne se lance pas, ajoutez son répertoire d'installation (dans mon cas, C: \ Program Files \ Beyond Compare 4) à votre variable de chemin système. Après cela, redémarrez votre shell. Git affichera Beyond Compare comme option difftool possible. Vous pouvez utiliser l'une des commandes ci-dessous pour lancer au-delà de la comparaison en tant que difftool (par exemple, pour comparer un fichier local avec une autre branche)

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

Vous pouvez configurer au-delà de la comparaison comme difftool par défaut en utilisant les commandes ci-dessous

   git config --global diff.tool bc

ps gardez à l'esprit que bc dans la commande ci-dessus peut être bc3 ou bc en fonction de ce que Git a pu trouver à partir de votre variable système de chemin.


2

Mise à jour pour BC4 64bit: Cela fonctionne pour Git pour Windows v.2.16.2 et Beyond Compare 4 - v.4.2.4 (64bit Edition)

J'ai modifié manuellement le fichier .gitconfig situé dans la racine de mon utilisateur "C: \ Users \ MyUserName" et remplacé les balises diff / difftool et merge / mergetool par

[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"


1

La différence réside dans l'appel de l'exe: configurez-le pour appeler bcomp.exe et cela fonctionnera correctement. Configurez votre environnement pour appeler bcompare.exe et vous vous retrouverez avec le côté de la comparaison provenant de votre système de révision vide.


1

Exécutez ces commandes pour Beyond Compare 3 (si le chemin BCompare.exe est différent dans votre système, veuillez le remplacer en fonction du vôtre):

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Ensuite, utilisez git difftool


1

Windows 10, Git v2.13.2

Mon .gitconfig. N'oubliez pas d'ajouter un caractère d'échappement pour '\' et '"'.

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

Vous pouvez faire référence à la configuration au-delà de la comparaison en tant que difftool pour utiliser les commandes git pour le configurer.


Salut, j'avais un script similaire et il a échoué jusqu'à ce que je passe à C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe. Avec BCompare.exe, le fichier temporaire a été supprimé avant de pouvoir être comparé, donc je n'ai vu que le dernier fichier, pas de version enregistrée.
Gabriel le

0

Pour une raison quelconque, pour moi, le fichier tmp créé par git diff était en cours de suppression avant son ouverture dans au-delà de la comparaison. J'ai d'abord dû le copier dans un autre emplacement.

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"

0

Pour MAC, après avoir fait beaucoup de recherches, cela a fonctionné pour moi ..! 1. Installez l'au-delà de comparer et cela sera installé dans l'emplacement ci-dessous

/ Applications / Au-delà \ Compare.app/Contents/MacOS/bcomp

Veuillez suivre ces étapes pour faire de bc un outil de diff / fusion dans git http://www.scootersoftware.com/support.php?zz=kb_mac


0

Pour git version 2.15.1.windows.2 avec BC2.exe.

La config ci-dessous fonctionne enfin sur ma machine.

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.