Git: configure patterns for difftool and mergetool
Asked Answered
C

1

7

In Mercurial, one can define a pattern for external diff and merge tools (so that they are called only for files matching the pattern specified):

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

How to define such patterns in Git?

[mergetool] section in git-config(1) does not mention any pattern, mask or anyting similar.

EDIT:

Here is a relevant part of my .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"

Now it works for all files.

I want my difftool and mergetool to be called only for files with names ending with .ext

EDIT:

I have added a file .git/info/attributes with the following contents:

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

I've also added

[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

to my .git/config.

Now I run

git difftool

It calls KDiff3 instead of my difftool. What do I do wrong?

Remark: I'm playing with difftool instead of mergetool because it is easier to test and I believe that if I manage to configure difftool, it will be obvious for me how to configure mergetool.

EDIT:

Difftool now works.

.git/config:

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

.git/info/attributes:

.ext diff=difftool

difftool.git.sh (in PATH)

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

But there is a side-effect on Windows: git diff now results in APPCRASH.

EDIT:

I have figured out how to avoid crashing or hanging of git diff: one should use git difftool or call git diff through sh: sh -c "git diff"

Corvus answered 13/9, 2011 at 13:57 Comment(1)
Hi, can you update the answer with the full resolution? a lot of edits here to keep up what is the actual resolution.Dearing
I
4

You would use a merge driver in a gitattributes file.

See for instance "How do I tell git to always select my local version for conflicted merges on a specific file?"

*.ext merge=mymergetool

You can use patterns in a gitattributes file.

Ineligible answered 13/9, 2011 at 14:3 Comment(1)
Does the same apply to diff driver? Could not manage to make it work. I really need a simple sample.Corvus

© 2022 - 2024 — McMap. All rights reserved.