38 votes

Comment puis-je diriger dans FileMerge en tant qu'outil de diff avec git sous OS X?

Je suis nouveau sur Git sur OS X et je l’utilise en ligne de commande. Je viens du monde de Tortoise SVN et de Beyond Compare sur Windows.

Je veux pouvoir envoyer des diffs à FileMerge.

Je pouvais le faire avec TextMate simplement en utilisant:

 git diff | mate
 

Mais je ne sais pas comment mettre en place cette configuration pour pouvoir utiliser FileMerge à la place.

54voto

undees Points 1263

Bien que ce ne soit pas exactement la même chose que piping stdin dans un script, vous pouvez le faire:

 git difftool -t opendiff -y
 

Cela lancera FileMerge une fois pour chaque fichier. Faire tout l’arbre du projet à la fois prend un peu de script .

Voir aussi cette question .

14voto

Syzygies Points 306

Créer un script exécutable git-diff-cmd.sh

 #!/bin/bash

xattr -w com.apple.TextEncoding "UTF-8;134217984" "$2"
xattr -w com.apple.TextEncoding "UTF-8;134217984" "$5"

/usr/bin/opendiff "$2" "$5" -merge "$1"
 

Maintenant, éditez votre fichier .gitconfig pour inclure les lignes

 [diff]
    external = <path-to>/git-diff-cmd.sh
 

... en remplaçant <path-to> par le chemin de git-diff-cmd.sh . Maintenant, git diff utilisera FileMerge et affichera correctement les caractères Unicode UTF-8.

5voto

millerdev Points 3172

Voici un script (à l'origine de Toby White) que j'ai piraté pour comparer la structure de répertoires complète dans FileMerge plutôt que d'ouvrir chaque fichier individuellement.

 #!/bin/sh
#
# This script was written by Toby White under an unknown license, and published
# on the Git mailing list:
#
#   http://kerneltrap.org/mailarchive/git/2007/11/21/435536
#
# Superficial changes were made by Nathan de Vries to allow the script to be
# run under Leopard.
#
# Adapted by Daniel Miller
# - allow changes to be saved back to the working copy when diffing against HEAD
# - work when FileMerge is already open
# - always compare archived copies so ignored files are excluded from the diff
#
# Known issues:
# - Always uses the same two directories (/tmp/git-opendiff-old and
#   /tmp/git-opendiff-new); THEY WILL BE DELETED IF THEY ALREADY EXIST.
#   Ugly, I know, but it makes the script work even if FileMerge is open.
# - Does not show unstaged changes.

if test $# = 0; then
    echo "usage: $0 (--cached | <ref>) [<ref>]"
    exit
elif test "$1" = --cached; then
    OLD=HEAD
    NEW=`git write-tree`
    shift
fi
if test $# -gt 0; then
    OLD="$1"; shift
fi
test $# -gt 0 && test -z "$CACHED" && NEW="$1"

TMP_OLD=/tmp/git-opendiff-old
TMP_NEW=/tmp/git-opendiff-new
test -d $TMP_OLD && rm -rf $TMP_OLD; mkdir $TMP_OLD
test -d $TMP_NEW && rm -rf $TMP_NEW; mkdir $TMP_NEW

TMP_OLD=$TMP_OLD/$OLD; mkdir -p $TMP_OLD
git archive --format=tar $OLD | (cd $TMP_OLD; tar xf -)

if test -z "$NEW"; then
    SAVE_TO=$(git rev-parse --show-cdup)
    test -z "$cdup" && SAVE_TO=.
    git archive --format=tar HEAD | (cd $TMP_NEW; tar xf -)
    opendiff $TMP_OLD $TMP_NEW -merge $SAVE_TO
else
    TMP_NEW=$TMP_NEW/$NEW; mkdir -p $TMP_NEW
    git archive --format=tar $NEW | (cd $TMP_NEW; tar xf -)
    opendiff $TMP_OLD $TMP_NEW
fi
 

Mettez ceci quelque part sur votre chemin. Je préfère ~/bin/git-opendiff , ce qui signifie que git opendiff ... fonctionne comme prévu.

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