web-dev-qa-db-fra.com

Impossible de différencier les fichiers dans deux branches distinctes dans Git

J'ai FileA dans branchA et FileB dans branchB.

Le problème est que je ne peux accéder qu'à un seul fichier à la fois. Je voudrais pouvoir comparer les fichiers par FileMerge ou meld, car ce sont les seuls diffTools que j'ai trouvés pour Mac.

Comment pouvez-vous différencier par fusion/FileMerge les deux fichiers ?


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

Masi: Vous pouvez utiliser opendiff pour autoriser FileMerge pour avoir des fichiers à partir de l'entrée standard. Le prochain problème est donc de trouver comment faire l'outil diff de git pour utiliser opendiff.


2ème problème développé: pour faire l'outil de diff de Git pour utiliser opendiff dans Mac

Vous pouvez utiliser " git mergetool " pour la fusion, et dans git moderne (c'est-à-dire la version 1.6.3 et les versions ultérieures) " git difftool " pour comparer à l'aide d'outils graphiques. Bien sûr, vous devez d'abord les configurer, mais ils font une certaine détection automatique (avec une préférence codée en dur, bien sûr), et si je me souviens bien, le support opendiff est intégré.

Et puis bien sûr vous pourrez utiliser votre outil graphique (opendiff/FileMerge) comme vous utiliseriez le "git diff" ordinaire, par exemple

Prompt> git difftool somebranch:UNREADME otherbranch:README
66
Jakub Narębski

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

master:README

branch:UNREADME

Vous pouvez les différencier via git avec:

git diff branch:UNREADME master:README

Vous pouvez obtenir un artefact de référentiel en sortie standard avec git show:

git show branch1:UNREADME

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

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

Lorsque la syntaxe <(...) bash prend la sortie de la commande incluse, l'exécute dans un canal et place le chemin d'accès au fichier du canal sur la ligne de commande.

61
Kyle Burton

Si vous êtes actuellement en train de payer sur branchA, par exemple, vous pouvez utiliser la commande:

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

Vous pouvez ensuite modifier le diff si vous souhaitez un sous-ensemble des modifications, ou le laisser tel quel, et git apply le diff comme patch. En ce qui concerne un outil GUI qui fait cela, j'espère que quelqu'un d'autre y aura une suggestion.

37
Jarret Hardie

De les docs , vous avez besoin de quelque chose de similaire à ce qui suit dans votre fichier .git/config:

# Our diff algorithm
[diff]
    external = opendiff
1
Hank Gay