2

'git difftool' を使用すると、ファイルの 1 つが最新バージョンの場合、相対パスが外部の diff アプリケーションに渡されます。

~/.gitconfig

[difftool "echo"]
    cmd = echo $LOCAL $REMOTE
    path =
[diff]
    tool = echo

コマンド例

git difftool e3d654bc65404b9229abc0251a6793ffbfccdee3 6c6b5fd34196402e4fa0e8cf42f681d9fbd5359f

Viewing: 'app/views/shared/_graph.html.slim'
Launch 'echo' [Y/n]: y
app/views/shared/_graph.html.slim /var/folders/fs/3pgvhwkj2vq4qt3q6n74s5880000gn/T//XGFoyj__graph.html.slim

この例app/views/shared/_graph.html.slimでは、外部差分アプリケーションに渡される相対パスであり、相対パスであるため、差分アプリケーションはそれを開く方法を知りません。

「git difftool」で常に絶対パスをエクスポートするにはどうすればよいですか?

4

4 に答える 4

2

これは、私が最終的に使用した hlovdal および VonC の回答に基づくソリューションです。

~/.git_absolute_path.sh

#!/bin/sh

FILE_PATH="$1"

case "$FILE_PATH"
in
        /*)
                NEW_PATH="$FILE_PATH"
                ;;
        *)
                NEW_PATH=`git rev-parse --show-toplevel`/"$FILE_PATH"
                ;;
esac

echo "$NEW_PATH"

~/.gitconfig

[difftool "echo"]
    cmd = echo `~/.git_absolute_path.sh $LOCAL` `~/.git_absolute_path.sh $REMOTE`
    path =
[mergetool "echo"]
    cmd = echo `~/.git_absolute_path.sh $LOCAL` `~/.git_absolute_path.sh $REMOTE` `~/.git_absolute_path.sh $BASE` `~/.git_absolute_path.sh $MERGED`
    trustExitCode = true
[diff]
    tool = echo

ここでの違いは、パスごとに 1 つのスクリプトを再利用していることです。

于 2014-03-15T08:43:31.530 に答える