web-dev-qa-db-fra.com

Problèmes avec Git et DiffTool: à quoi pointent LOCAL et REMOTE?

J'ai travaillé pour que tortoisemerge fonctionne comme l'option difftool dans Git avec mon fichier .gitconfig montrant actuellement:

   [diff]
        tool = tortoise

    [difftool "tortoise"]
        cmd = tortoisemerge.exe -mine:$LOCAL -base:$REMOTE

    [difftool]
        Prompt = false

Selon tortoise merge docs la commande 'mine' indique quel fichier sera affiché sur la droite, dans un double sens.

Ma question est, à quoi les variables LOCAL et REMOTE fournies par GIT pointent-elles réellement? Le documentation est un peu vague indiquant que

LOCAL est défini sur le nom du fichier temporaire contenant le contenu de la pré-image diff et REMOTE est défini sur le nom du fichier temporaire contenant le contenu de la post-image diff.

Le problème se pose lorsque je modifie un fichier, puis que je saisis 'git difftool' tortoisemerge est démarré avec le fichier de répertoire de travail à GAUCHE et non à droite comme je le suppose. Je sais que je peux simplement changer les commandes "mine" et "local" mais j'essayais de comprendre vers quoi les points local/distant et la meilleure façon de résoudre ce problème

45
x1886x

Je pense que cela signifie que $LOCAL est toujours le a/whatever dans la sortie diff, tandis que $REMOTE est le b/whatever. En d'autres termes, si vous le faites:

 git difftool master experiment -- Makefile

$LOCAL sera un fichier temporaire indiquant l'état de Makefile dans la branche master, tandis que $REMOTE sera un fichier temporaire montrant son état dans la branche experiment.

Si vous venez de courir:

git difftool

... qui vous montre la différence entre l'index et votre arborescence de travail, donc pour chaque fichier avec des différences, $LOCAL sera un fichier temporaire identique à la version du fichier dans l'index, tandis que $REMOTE sera la version du fichier dans votre arborescence de travail.

10
Mark Longair

il y a 4 composants à cela (notez qu'avant cette étape, vous auriez déjà fait un enregistrement local.)

  • L'archivage local que votre arbre git a: LOCAL
  • Le responsable du référentiel distant (qui va être fusionné): REMOTE
  • ancêtre commun à la fois LOCAL et REMOTE: BASE
  • Le fichier qui sera écrit en conséquence: FUSIONNÉ .
181
Sandeep

J'utilise TortoiseSvn pour la fusion et la diff et fonctionne comme prévu. En diff, il montre ma copie de travail à droite. Mon .gitconfig avec TortoiseSvn est comme suit

[diff]
    tool = tortoise


[merge]
    tool = tortoise


[mergetool "tortoise"]
    cmd = TortoiseMerge.exe -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[difftool "tortoise"]
    cmd = tortoisemerge.exe -mine:\"$REMOTE\" -base:\"$LOCAL\"
1
Anup