21

私はGitを使い始めたばかりで、明らかな何かを見逃している可能性がありますが、ここに行きます:

  • WindowsXPでmsysgit1.6.2.2を使用しています
  • インストール中に、「GitBashのみを使用する」オプション1を選択しました

組み込みのgitdiffをDiffMergeに置き換えるために使用できるラッパースクリプトをまとめようとしています。SOのこのスレッドに基づいて、次のバッチファイルを作成しました。

@echo off
REM ---- Switch forward slashes to back slashes ----
set oldW=%2
set oldW=%oldW:/=\%
set newW=%5
set newW=%newW:/=\%

REM ---- Launch DiffMerge ----
"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" %oldW% /title2="New Version" %newW%

batファイルを%GIT_INSTALL%/ cmdの下に置き、.gitconfigファイルを次のように編集しました。

[diff]
external = C:/Programs/git/cmd/git-diff-wrapper.bat

Git Bashを起動し、git diff HEAD HEAD〜を実行すると-myfile

私はメッセージを受け取りますFile (\dev\null) not found-私がWindowsを使用していることを考えると、それは驚くべきことではありません。

を押して、gitkを起動し、[編集]> [設定]で、同じラッパースクリプトを選択しました。特定のファイルに対して「externaldiff」オプションを試してみると、不可解なエラーメッセージが表示されますUnknown Option "

明らかに、私はもう何をしているのかわからないので、どんな助けでも大歓迎です。

4

4 に答える 4

15

私はこれに対する答えをインターネット全体で探しました。私は上記および他の場所ですべての解決策を試しました。マージ部分を機能させることができましたが、差分部分を機能させることはできませんでした。その逆も可能です。それで、私が最終的にしたことは、私がインターネットで得たすべての情報から私自身の簡単な解決策を一緒にハックすることでした。.gitconfig通常は次のディレクトリにあるスクリプトを編集するだけで、スクリプトは必要ありませんC:\Documents and Settings\[username]。DiffMergeプログラムがすでにインストールされている必要があります。

これが私の.gitconfigファイルの関連する抜粋です。のバージョンがある場所へのパスを編集する必要がありますDiffMerge。パスで古いDOS8.3形式を使用したことに注意してください

[diff]
    tool = diffm
[difftool "diffm"]
    cmd = "H:/PROGRA~1/SourceGear/DiffMerge/DiffMerge.exe $LOCAL $REMOTE"
    prompt = false

[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    cmd = "H:/PROGRA~1/SourceGear/DiffMerge/DiffMerge.exe --merge --result=$MERGED $LOCAL $BASE $REMOTE" 
    trustExitCode = false
    keepBackup = false

必要に応じて、コマンドを使用して設定することもできますgit config --replace --global [options]


この単純な解決策は私にとっても完璧に機能します。DiffMerge(3.3.1)の最新バージョンでは、コマンドパスを変更する必要があります。

    cmd = "C:/PROGRA~1/SourceGear/Common/DiffMerge/sgdm.exe ...etc..."
于 2011-05-27T21:30:05.867 に答える
9

私は、msysgit1.6.2.2を使用した外部エディターとしてNotepad++を設定することで多少似た経験をしました。

重要なのは、ラッパーがDOSスクリプトではなく、/ bin/shスクリプトであることを理解することでした。

したがって、「。bat」を挿入してみてください(正確にはバットスクリプトではありませんが、ここでは拡張子は重要ではありません)。

#!/bin/sh

# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode

"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" "$2" /title2="New Version" "$5" | cat

\すべての' 'を''にすることを心配する必要はありません/。これは、外部のdiffツールを呼び出すGitスクリプトによって実行されます。

私はDiffMergeでテストしませんでしたが、WinMergeを使用すると、DOSセッションまたはGitシェルの両方から問題なく動作します。

#!/bin/sh
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$2" "$5" | cat

(' -e'オプションを使用すると、''を入力するだけESCでdiffツールを閉じて終了できます。これはうまく機能します!)


代替テキストaverage_geekはコメントに追加します:

''ヘッダーを追加し、/bin/shgitdiffの実行を再試行しました。
今回のエラーは次のとおりです。
Unexpected parameter 'C:/Docume~/avggeek/LOCALS~1/Temp/.diff_b08444
呼び出したときに渡されるパラメーターを確認する方法はありますgit diffか?

1 /実際に渡されるパラメータを確認する方法があります!ファイル
に次の行を追加します。C:\Program Files\Git\libexec\git-core\git-sh-setup

git_editor() {
    : "${GIT_EDITOR:=$(git config core.editor)}"
    : "${GIT_EDITOR:=${VISUAL:-${EDITOR}}}"
    case "$GIT_EDITOR,$TERM" in
    ,dumb)
        echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL,"
        echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb."
        echo >&2 "Please set one of these variables to an appropriate"
        echo >&2 "editor or run $0 with options that will not cause an"
        echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)."
        exit 1
        ;;
    esac
#### ADD THIS LINE BELOW
    echo >&2 "editor is ${GIT_EDITOR:=vi} $@."
#### END ADDITION ABOVE
    eval "${GIT_EDITOR:=vi}" '"$@"'
}

どのエディターがどのパラメーターで呼び出されているかがわかります。

さて、「予期しないパラメータ」の部分に関して: WinMergeU.exeを「 」の代わりに「」で
呼び出したときに同じ種類のエラーが発生したので、最初の質問は次のとおり です。「」ビットを次のように使用できませんでしたか? " "または" "または" "または" "?これは、DiffMergeのPDFドキュメントの第9章「コマンドライン引数」からわかることです。 そうでない場合は、さまざまなパラメーターを適切に区切るために、いくつかの二重引用符が必要であると思われます。何かのようなもの:/e /ub-e -ub
/title1-title1-t1--title1--t1

"/title1="Old Version"" "$2" "/title2="New Version"" "$5"
or
"/title1=\"Old Version\"" "$2" "/title2=\"New Version\"" "$5"

しかし、私のお金はむしろ「-title1」または「-t1」の形式になります。

-t1="Old Version" "$2" -t2="New Version" "$5"

正常に動作するはずです。

于 2009-04-23T21:49:57.240 に答える
8

これは私にとって次のように機能します:

~/.gitconfig

[merge]
tool = diffmerge
[mergetool "diffmerge"]
cmd = \"C:/Program Files/git/cmd/git-diffmerge-merge.sh\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = false

C:\Program Files\Git\cmd\git-diffmerge-merge.sh

#!/bin/sh

localPath="$2"
basePath="$1"
remotePath="$3"
resultPath="$4"

if [ ! -f $basePath ]
then
    basePath="~/diffmerge-empty"
fi

"C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe" --merge --result="$resultPath" "$localPath" "$basePath" "$remotePath" --title1="Mine" --title2="Merged: $4" --title3="Theirs"

クレジットの一部はhttp://therightstuff.de/2009/01/28/Setting-Up-SourceGear-DiffMerge-With-Git.aspxに移動します;)

于 2009-10-28T19:08:48.263 に答える
4

VonC--t1および-t2に切り替えると、エラーが修正されました。Diffmergeがgitbashで機能するようになりました:)

外部差分サポートを追加したgitkパッチを少し調べた後、2つのファイルを引数として直接外部差分プログラムを呼び出していることに気付きました。そこで、gitk> Edit> Preferencesを変更し、次のコマンドを外部差分ツールオプションに直接配置しました。

"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" -t1="Old Version" -t2="New Version"

今、私はDiffMergeをgitkでも動作させています:-)

于 2009-04-24T05:39:57.640 に答える