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