59 votes

Incapable de diff fichiers en deux branches distinctes dans Git

J'ai FileA dans le branchA et Fichierb dans branchB.

Le problème c'est que je peux accéder à un seul fichier à la fois. Je voudrais être en mesure de comparer les fichiers par FileMerge ou fondre, puisqu'elles sont les seules diffTools mrtnk avons trouvé pour Mac.

Comment pouvez-vous diff par meld/FileMerge les deux fichiers?


[Résolu]: 1er développés Problème: FileMerge ne permet pas l'entrée standard

Masi: Vous pouvez utiliser opendiff pour permettre FileMerge d'avoir des fichiers à partir de l'entrée standard. Donc le problème suivant est de trouver comment faire git de l'outil de comparaison à utiliser opendiff.


2ème développés Problème: pour faire Git de l'outil de comparaison à utiliser opendiff en Mac

66voto

Jakub Narębski Points 87537

Vous pouvez utilisez "git mergetool" pour la fusion, et moderne git (le sens de la version 1.6.3 et plus tard) "git difftool" pour la comparaison à l'aide d'outils graphiques. Bien sûr, vous devez les configurer en premier, mais ils font des auto-détection (avec quelques codé en dur de préférence, bien sûr), et si je me souviens bien opendiff support est construit dans.

Et puis, bien sûr, vous serez en mesure d'utiliser votre outil graphique (opendiff / FileMerge) comme vous le feriez pour une utilisation ordinaire "git diff", par exemple

prompt> git difftool somebranch:UNREADME otherbranch:README

61voto

Kyle Burton Points 10471

git prend en charge les noms de branche dans le cadre des chemins de référentiel. Par exemple, si vous avez les fichiers suivants dans votre référentiel, README seulement sur master, et UNREADME seulement sur branch:

master:README

branch:UNREADME

Vous pouvez diff via git avec:

git diff branch:UNREADME master:README

Vous pouvez obtenir un référentiel artefact sur la sortie standard avec git show:

git show branch1:UNREADME

Donc, si votre externe diff utilitaire peut prendre 2 fichiers sur l'invite bash, vous pouvez diff avec quelque chose comme:

diff-command <(git show branch1:UNREADME) <(git show master:README)

Où l' <(...) bash syntaxe prend la sortie du clos de la commande, s'exécute dans un tuyau, et met le chemin d'accès au fichier de la conduite sur la ligne de commande.

37voto

Jarret Hardie Points 36266

Si vous êtes actuellement à la caisse pour branchA, par exemple, vous pouvez utiliser la commande:

git diff branchB path/to/common/file/between/branches.txt

Vous pouvez ensuite modifier la diff si vous voulez un sous-ensemble de ces changements, ou le laisser tel quel, et git apply le diff comme un patch. Comme pour un outil graphique qui fait cela, j'espère que quelqu'un d'autre aura une suggestion.

1voto

Hank Gay Points 36173

De la documentation, vous avez besoin de quelque chose de semblable au suivant dans votre .git/config fichier:

# Our diff algorithm
[diff]
    external = opendiff

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X