Git: configure patterns for difftool and mergetool

青春壹個敷衍的年華 提交于 2019-12-09 12:44:21

问题


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"


回答1:


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.



来源:https://stackoverflow.com/questions/7403102/git-configure-patterns-for-difftool-and-mergetool

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!