質問

があるので、使用Winmerge内にgitい負荷?

役に立ちましたか?

解決

更新日2015年、6年後には:

として"git mergetool winmerge"簡単な git config diff.tool winmerge ます。

Git2.5+(第2四半期、2015年度)を意識しWinmergeとしてのdiffはmergeツール!


独自の答え(2009~2012年)

(msysgit,1.6.5、DOSセッション)

最初の部分を使用winmerge)"に記載したしたい表示"git diff'の出力を視覚diffプログラム?"

C:\myGitRepo>git config --replace --global diff.tool winmerge
C:\myGitRepo>git config --replace --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --replace --global difftool.prompt false

winmerge.sh ディレクトリに格納されているの PATH:

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"$PROGRAMFILES/WinMerge/WinMergeU.exe" -e -u -dl "Local" -dr "Remote" "$1" "$2"

参照 WinMergeのコマンドラインオプション)

git difftool

今回の打上げWinMerge.
したい場合 git diff 開始WinMerge、セット:

set GIT_EXTERNAL_DIFF=winmerge.sh

ものの付加価値から応用できることと同じdiffツール 現在のすべての違い一つのバッチ の代わりにして提示して順次強まり、差分ツールはwindowsのファイルです。

更新日2012年 (2と半年後):

比較ディレクトリの代わりにファイルのファイルでご覧いただけます:
[発表]Git1.7.11.rc1:

"git difftool"知る"--dir-diff"オプションして産卵のために外部のdiffツール "の二つのディレクトリの階層 同時に後populating二つの一時ディレクトリ 走らせるのではなくインスタンスの外部ツールに、一連のファイルに対.

パッチ difftool:教え difftool 対応ディレクトリに負荷を"の答え"ディレクトリの比較Git支店 してしまいます。


原difftoolによるディレクトリのスクリプト(2009年)

として 瀬Illingworth つに 彼の答え, では、スクリプトgit-diffall.sh (またはパス)でいっぱいで仕分けもバッチリです:

#!/bin/sh
git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

ものだけを開く n windowsのための n ファイルの場合は利用するようにして、 -s オプションのWinMergeで動作しませんので、温度ファイルが削除されているのdifftoolも早期)


そのため、私のようなアプローチ GitDiff.bat-電力-差分をとGI, することができますの見直しファイルの一覧と、前の選択を検討し、その内部。
って調整で使用DOSコマンド

@echo off

setlocal

if "%1" == "-?" (
    echo GitDiff - enables diffing of file lists, instead of having to serially
    echo diff files without being able to go back to a previous file.
    echo Command-line options are passed through to git diff.
    echo If GIT_FOLDER_DIFF is set, it is used to diff the file lists. Default is windff.
    goto END
)

if "%GIT_DIFF_COPY_FILES%"=="" (
    rd /s /q %TEMP%\GitDiff
    mkdir %TEMP%\GitDiff
    mkdir %TEMP%\GitDiff\old
    mkdir %TEMP%\GitDiff\new

    REM This batch file will be called by git diff. This env var indicates whether it is
    REM being called directly, or inside git diff
    set GIT_DIFF_COPY_FILES=1

    set GIT_DIFF_OLD_FILES=%TEMP%\GitDiff\old
    set GIT_DIFF_NEW_FILES=%TEMP%\GitDiff\new

    set GIT_EXTERNAL_DIFF=%~dp0\GitDiff.bat
    echo Please wait and press q when you see "(END)" printed in reverse color...
    call git diff %*

    if defined GIT_FOLDER_DIFF (
        REM This command using GIT_FOLDER_DIFF just does not work for some reason.
        %GIT_FOLDER_DIFF% %TEMP%\GitDiff\old %TEMP%\GitDiff\new
        goto END
    )

    if exist "%ProgramFiles%\Beyond Compare 2\BC2.exe" (
        set GIT_FOLDER_DIFF="%ProgramFiles%\Beyond Compare 2\BC2.exe"
        "%ProgramFiles%\Beyond Compare 2\BC2.exe" %TEMP%\GitDiff\old %TEMP%\GitDiff\new
        goto END
    )

    "%ProgramFiles(x86)%\WinMerge\WinMergeU.exe" -r -e -dl "Local" -dr "Remote"  %TEMP%\GitDiff\old %TEMP%\GitDiff\new
    goto END
)

REM diff is called by git with 7 parameters:
REM     path old-file old-hex old-mode new-file new-hex new-mode
copy %TEMP%\%~nx2 %GIT_DIFF_OLD_FILES%\%1
copy %5 %GIT_DIFF_NEW_FILES%

:END

ではない強固な取り扱うのに十分なファイルと同名の異なるディレクトリがこれまでよりも速やかに一般い出すことができるように:
ここだけWinMergeが開き、ファイルの一覧を内蔵。クリックすることができまるものにしたい検討し、簡単な ESC あるすべて WinMerge-diff セッション。

他のヒント

っていないときトラブルを最初の一部を2箇所に固定しており

  1. 次のコマンドの設定winmerge.cmdに必要な追加のスラッシュにcmdline前$局$REMOTE),else cygwinした代替の変動にcmdline

    C:\myGitRepo>git config --replace --global difftool.winmerge.cmd "winmerge.sh \"\$LOCAL\" \"\$REMOTE\""
    
  2. 変更のwinmerge.sh ファイルなし、したが右のパス-無効なエラー)

    #!/bin/sh
    echo Launching WinMergeU.exe: "$(cygpath -aw "$1")" "$(cygpath -aw "$2")"
    "$PROGRAMFILES/WinMerge/WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$(cygpath -aw "$1")" "$(cygpath -aw "$2")"
    

スレッドが混乱し、二股になっているので、「--dir-diffの」ディレクトリ一覧はこちら集約されている指示msysgit GitのWindows用WinMergeの方法。

ステップ1 の - 次の内容(例えば/home/bin/winmerge.shなど)あなたのパスにアクセス可能な場所にwinmerge.shという名前のファイルを作成します。

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"$PROGRAMFILES/WinMerge/WinMergeU.exe" -r -ub -dl "Remote" -dr "Local" "$1" "$2"

ステップ2 の - (これらのオプションは/home/.gitconfigに格納されます)difftoolとしてwinmerge.sh使用するのgitを指示するGitのバッシュで次のコマンドを入力します:

git config --replace --global diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --replace --global difftool.prompt false

ステップ3 の - 今、あなたはあなたのWinMergeの差分を開始するためのGit Bashの中で次のコマンドを入力してテストすることができます:

git difftool --dir-diff

ステップ4 の - すばやくアクセスするために、(ファイルが存在しない場合は、この行と.bashrcのファイルを作成します)あなたのホームフォルダに.bashrcにするために、この行を追加することによって、このコマンドのエイリアスを作成:

alias diffdir='git difftool --dir-diff'

ステップ5 の - 今、あなたはすぐにただのGit Bashのに次のコマンドを入力してWinMergeので差分を見ることができます。

diffdir

私は差分を設定し、存在するために、別の.SHファイルを必要としない、適切なパラメータでGitの設定でツールをマージするスクリプトを持っています。それは私のために正常に動作しているようだ。

git config --global diff.tool winmerge
git config --global difftool.prompt false
git config --global difftool.winmerge.cmd "\"\$PROGRAMFILES\"/WinMerge/WinMergeU.exe -r -u -e -dl \"Local\" -dr \"Remote\" \"\$LOCAL\" \"\$REMOTE\""

git config --global merge.tool winmerge
git config --global mergetool.prompt false
git config --global mergetool.winmerge.trustExitCode true
git config --global mergetool.winmerge.cmd "\"\$PROGRAMFILES\"/WinMerge/WinMergeU.exe -r -u -e -dl \"Local\" -dr \"Remote\" \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""

- パラメータが.gitconfigにリストされるように全体.CMD部分が引用されている適切

Windows上であなたは、このようにそれを行うことができます:

1)を開き.gitconfigファイル。それはあなたのホームディレクトリにあります:C:\ユーザー\ username.gitconfig

2)以下の行を追加します。 WinMergeのようにパスを包む単一引用符に注意します:

[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$LOCAL" "$REMOTE"
[difftool]
    prompt = false
[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" \"$MERGED\" \"$REMOTE\"
[mergetool]
    keepBackup = false
    trustExitCode = false

な構成:

git difftool --tool winmerge

仮:

  • Winmerge置
  • Gitのためのwindowsがインストールされているときは、"git版2.12.0.windows1"以上でも以前のバージョンのgitの場合を導入していを出力します。

私はGitのインストールはbashシェルで来たように、溶液は、DOSのバッチファイルとして提示された理由について混乱していました。また、私はbashのから実行しているDOSコンテキストを取得できませんでしたので、私は以前にbashのコンテキストで共有されたものに適応しようとしました。

git diffは、ファイルごとに一回指定されたコマンドを実行するように見えるので、私は2つのbashスクリプトに私の解決策を分割します:

まず、前述したようにdifftoolことがgitprepdiff.shを設定

#!/bin/sh
#echo ...gitprepdiff.sh
cp -v $1 "$TMP/GitDiff/old/$2"
cp -v $2 "$TMP/GitDiff/new"

私はまたgit configureコマンドの結果が見出されC:\Users\<username>\.gitconfigureで直接編集することができることに留意

普段gitdiff.shを呼ぶだろう。ここで、

git diffは、コマンドラインで実行されます。

#!/bin/sh
#echo Running gitdiff.sh...

DIFFTEMP=$TMP/GitDiff

echo Deleting and re-creating $DIFFTEMP...
rm -rf $DIFFTEMP;
mkdir $DIFFTEMP;

echo Creating $DIFFTEMP/old...
mkdir $DIFFTEMP/old;

echo Creating $DIFFTEMP/new...
mkdir $DIFFTEMP/new;

git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename";
done

"$PROGRAMFILES\WinMerge\WinMergeU.exe" -r -e -dl "Repository" -dr "Working" $LOCALAPPDATA\\Temp\\1\\GitDiff\\old $LOCALAPPDATA\\Temp\\1\\GitDiff\\new

また、注目すべきことは、私はWinMergeのに私の呼び出しで、後者を使用している理由ですので、私のインストール時に、(bashで)/tmpは、(Windowsの)%LOCALAPPDATA%\Temp\1\にマップ、ということです。

git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "\"$PROGRAMFILES\\WinMerge\\WinMergeU.exe\" -u -dl \"Local\" -dr \"Remote\" \"\$LOCAL\" \"\$REMOTE\""
git config --global difftool.prompt false

は、 WinMergeのコマンドラインマニュアルのあたりのように、「パラメータ(どちらかスラッシュが付いています/)またはダッシュ( - )文字 "

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top