Git:为difftool和mergetool配置模式 [英] Git: configure patterns for difftool and mergetool

查看:147
本文介绍了Git:为difftool和mergetool配置模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Mercurial中,可以为外部差异和合并工具定义一个模式(这样它们只能用于匹配指定模式的文件):

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

如何在Git中定义这样的模式?


$ b $ git-config中的[mergetool]部分(1)没有提及任何模式,掩码或任何类似的内容。



编辑

这是我的.git / config的相关部分:

  [diff] 
工具= difftool
[difftooldifftool]
cmd = difftool.git.sh$ LOCAL$ REMOTE$ BASE

[合并]
工具= mergetool
[mergetoolmergetool]
cmd = mergetool.git.sh$ LOCAL$ REMOTE$ BASE$ MERGED

现在它适用于所有文件。



我希望我的difftool和mergetool被称为只有名称为e的文件使用 .ext



编辑

我用以下内容添加了文件.git / info / attributes:

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

我也加入了

  [diffdifftool] 
name =我的自定义差异驱动程序
驱动程序= difftool.git.sh%A% B%O
[合并mergetool]
name =我的自定义合并驱动程序
驱动程序= mergetool.git.sh%A%B%O%A

添加到我的.git / config。

现在我运行

  git difftool 

它叫KDiff3而不是我的difftool。我做错了什么?



备注:我正在玩difftool而不是mergetool,因为它更容易测试,我相信如果我设法配置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 sh : sh -cgit diff

解决方案

您可以在 gitattributes file



请参阅 a>

  *。ext merge = mymergetool 

您可以在gitattributes文件中使用模式。


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"

解决方案

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.

这篇关于Git:为difftool和mergetool配置模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆