web-dev-qa-db-fra.com

Git Diff avec Beyond Compare

J'ai réussi à faire démarrer git avec Beyond Compare 3 en tant qu'outil de différenciation; toutefois, lorsque je fais un diff, le fichier que je compare par rapport à celui-ci 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 de droite de Beyond Compare.

J'utilise git 1.6.3.1 avec Cygwin avec Beyond Compare 3. J'ai mis en place une incomparable comparaison, comme ils le suggèrent dans la partie support de leur site Web, avec un script du genre: 

#!/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? 

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

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 n’affichera que mon fichier principal.css actuel dans le volet de gauche, il n’y a rien dans le volet de droite. Je voudrais voir mon main.css actuel dans le volet de gauche par rapport au HEAD, essentiellement ce que j’ai commis. 

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 config git ressemble à ceci pour Diff: 

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

Je n'utilise pas de fichiers wrapper supplémentaires .sh. 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 difftoolpour comparer et$ git mergetoolpour fusionner.

À propos de trustExitCode : Pour une commande de fusion personnalisée, indiquez 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 la fusion est vérifié et la fusion est supposée avoir abouti si le fichier a été mis à jour. Sinon, l'utilisateur est invité à indiquer le succès de la fusion. 

129
yehnan

Merci à @dahlbyk , auteur de Posh-Git , pour avoir posté sa config en tant que Gist . 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
27
Nick Josevski

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

Puis utilisez git difftool 

19
user

Documentation officielle a travaillé pour moi

9
Daniel Magnusson

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

[user]
        name = PeteW
        email = [email protected]
[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
6
nachonachoman

il semble que BC3 ne prenne en charge que la fusion à 3 voies pour PRO Edition . http://www.scootersoftware.com/moreinfo.php?zz=kb_editions

4
Mark Conway

La page de support Beyond Compare est un peu brève.

Vérifiez mon diff.external answer pour plus (en ce qui concerne la syntaxe exacte)

Extrait:

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

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

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

Veillez à utiliser la syntaxe correcte pour spécifier les chemins d'accès au script wrapper et à l'outil diff, c'est-à-dire utiliser des barres obliques au lieu de barres inversées. Dans mon cas, j'ai

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

en .gitconfig et

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

dans le script wrapper.


Remarque: vous pouvez également utiliser git difftool .

4
VonC

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

S'il vous plaît se référer 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
z33

Mise à jour pour BC4 64 bits: Ceci fonctionne pour Git pour Windows v.2.16.2 et Beyond Compare 4 - v.4.2.4 (Édition 64 bits)

J'ai modifié manuellement le fichier .gitconfig situé dans la racine de mon utilisateur "C:\Users\MyUserName"

[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\"
2
mitaka

Si vous utilisez Windows 7 (version professionnelle) et Git pour Windows (version 2.15 ou ultérieure), vous pouvez simplement exécuter la commande ci-dessous pour connaître les différents outils de prise en charge pris en charge par votre Git pour Windows.

git difftool --tool-help

Vous verrez une sortie semblable à 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 supporte pas (ne trouve pas) au-delà de la comparaison en tant que difftool pour le moment.

Pour que Git puisse trouver plus loin que comparé comme difftool valide, vous devez avoir le répertoire d'installation Beyond Compare dans votre variable d'environnement système chemin. Vous pouvez vérifier cela en exécutant bcompare depuis Shell (cmd, git bash ou powershell. J'utilise Git Bash). Si Beyond Compare ne démarre pas, ajoutez son répertoire d'installation (dans mon cas, C:\Program Files\Beyond Compare 4) à la variable de chemin d'accès de votre système. Après cela, redémarrez votre Shell. Git montrera Beyond Compare comme option difftool possible. Vous pouvez utiliser n’importe laquelle des commandes ci-dessous pour lancer une comparaison sans comparaison sous 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 comparer comme difftool par défaut en utilisant les commandes ci-dessous

   git config --global diff.tool bc

p.s. 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.

1
sarabdeep singh

Exécutez ces commandes pour Beyond Compare 3 (si le chemin BCompare.exe est différent sur votre système, remplacez-le en fonction de votre choix):

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

Puis utilisez git difftool

1
Jerry Zhang

La différence est dans le fichier exe appelé: configurez-le pour appeler bcomp.exe et tout fonctionnera bien. Configurez votre environnement pour appeler bcompare.exe et vous vous retrouverez avec le côté de la comparaison pris de votre système de révision vide.

1
rrozema

http://rubenlaguna.com/wp/2010/08/05/visual-difftool-cygwin-git/ a une solution que j'ai adoptée pour fonctionner pour BeyondCompare: http: // Gist. github.com/564573

1
Vincent Scheib

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 référencer une configuration sans comparaison avec difftool pour utiliser les commandes git afin de le configurer.

0
zhangyu12

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

/ Applications/Beyond\Compare.app/Contents/MacOS/bcomp

Veuillez suivre ces étapes pour transformer bc en outil diff/merge dans git http://www.scootersoftware.com/support.php?zz=kb_mac

0
Sreedhar GS

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

La configuration ci-dessous fonctionne enfin sur ma machine.

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

0
YChi Lu

Pour une raison quelconque, pour moi, le fichier tmp créé par git diff était supprimé avant son ouverture au-delà de la comparaison. Je devais d'abord le copier à un autre endroit.

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