开发者

Git: configure patterns for difftool and mergetool

开发者 https://www.devze.com 2023-04-04 18:34 出处:网络
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):

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 driv开发者_如何学Goer
    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"


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号