7

Mercurialでは、外部の差分ツールとマージツールのパターンを定義できます(指定されたパターンに一致するファイルに対してのみ呼び出されるように)。

[diff-patterns]
**.ext = difftool
[merge-patterns]
**.ext = mergetool

Gitでそのようなパターンを定義する方法は?

git-config(1)の[mergetool]セクションには、パターン、マスク、または同様のものについては言及されていません。

編集

これが私の.git/configの関連部分です:

[diff]
    tool = difftool
[difftool "difftool"]
    cmd = difftool.git.sh "$LOCAL" "$REMOTE" "$BASE"

[merge]
    tool = mergetool
[mergetool "mergetool"]
    cmd = mergetool.git.sh "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

これで、すべてのファイルで機能します。

difftoolとmergetoolは、名前がで終わるファイルに対してのみ呼び出されるようにしたい.ext

編集

次の内容のファイル.git/info/attributesを追加しました。

*.ext   diff=difftool
*.ext   merge=mergetool

私も追加しました

[diff "difftool"]
    name = my custom diff driver
    driver = difftool.git.sh %A %B %O
[merge "mergetool"]
    name = my custom merge driver
    driver = mergetool.git.sh %A %B %O %A

私の.git/configに。

今私は実行します

git difftool

私のdifftoolの代わりにKDiff3を呼び出します。私は何を間違えますか?

備考:テストが簡単なため、mergetoolではなくdifftoolを使用しています。また、difftoolを構成できれば、mergetoolの構成方法が明らかになると思います。

編集

Difftoolが機能するようになりました。

.git / config:

[diff "difftool"]
    command = difftool.git.sh

.git / info / attributes:

.ext diff=difftool

difftool.git.sh(PATH内)

#!/bin/sh
difftool.jar "$2" "$5"

ただし、Windowsには副作用がありますgit diff。結果はAPPCRASHになります。

編集

クラッシュやハングを回避する方法を理解しましたgit diff:使用するgit difftoolか、呼び出す必要がありgit diffますshsh -c "git diff"

4

1 に答える 1

4

gitattributesファイルでマージドライバーを使用します。

たとえば、「特定のファイルで競合するマージに対して常にローカルバージョンを選択するようにgitに指示するにはどうすればよいですか?」を参照してください。

*.ext merge=mymergetool

gitattributesファイルでパターンを使用できます。

于 2011-09-13T14:03:00.283 に答える