使用git,我可以通过以下方式设置用于某些文件扩展名的自定义diff工具 .git/config
[diff "csv_diff"]
command = Tools/csv_diff
Run Code Online (Sandbox Code Playgroud)
这个.gitattributes(在存储库的根目录中)
*.csv diff=csv_diff
Run Code Online (Sandbox Code Playgroud)
这在使用时有效git diff,但不起作用git show.我的问题是,我如何使用自定义工具git show?
Luc*_*ski 29
看起来你正在寻找--ext-diff选项.
以下是git show文档对此的评价:
--ext-DIFF
允许执行外部diff助手.如果您设置了外部差异驱动程序
gitattributes,则需要将此选项与git-log朋友一起使用.
Fer*_*big 10
就像@LucasTrzesniewski所说,您可以--ext-diff从命令行使用为当前会话设置差异.
您还可以使用.gitattributes来设置git-diff perfile.
git diff实现包含两部分:
$GIT_DIR/config或中的定义$HOME/.gitconfiggitattributesGit选择使用此设计将可执行代码与源代码分开,这使得一个git clone或其他git命令无法运行任何有害代码.
要编写定义,我们从包含的标题开始[diff "namehere"],然后是换行符.
下一行包含命令定义,该行如下:command = commandlinehere.然后,如果运行了7个参数,则调用此命令,这些参数记录在文档中的GIT_EXTERNAL_DIFF环境中.
GIT_EXTERNAL_DIFF设置环境变量GIT_EXTERNAL_DIFF时,将调用由其命名的程序,而不是上面描述的diff调用.对于添加,删除或修改的路径,GIT_EXTERNAL_DIFF使用7个参数调用:Run Code Online (Sandbox Code Playgroud)path old-file old-hex old-mode new-file new-hex new-mode where:<old | new> -file是GIT_EXTERNAL_DIFF可用于读取<old | new>内容的文件,
<old | new> -hex是40-hexdigit SHA-1哈希,
<old | new> -mode是文件模式的八进制表示.
文件参数可以指向用户的工作文件(例如"git-diff-files"中的new-file),/ dev/null(例如添加新文件时的旧文件)或临时文件(例如old-文件在索引中).
GIT_EXTERNAL_DIFF不要担心取消链接临时文件,它会在GIT_EXTERNAL_DIFF退出时被删除.对于未合并的路径,
GIT_EXTERNAL_DIFF使用1参数<path>调用.对于每个路径
GIT_EXTERNAL_DIFF被称为两个环境变量,GIT_DIFF_PATH_COUNTER并GIT_DIFF_PATH_TOTAL设置.
总示例如下所示:
[diff "jcdiff"]
command = j-c-diff
Run Code Online (Sandbox Code Playgroud)
我们需要修改我们的gitattributes以使用我们的自定义驱动程序.gitattributes文件包含类似于的语法filename value [value2 [value3 [value4 [...]]]].
例子:
* diff=jcdiff
Run Code Online (Sandbox Code Playgroud)
我们为每个文件使用我们的自定义git diff.
*.java diff=javadiff
*.python diff=pythondiff
Run Code Online (Sandbox Code Playgroud)
使用javadiff用于java文件,pythondiff用于python文件.
* diff=globaldiff
*.java diff=javadiff
Run Code Online (Sandbox Code Playgroud)
使用javadiff表示java文件,使用globaldiff表示剩余文件.
--ext-diff您可以使用添加别名git config alias.showobject 'show --ext-diff'来定义一个名为git showobject自动使用我们的过滤器的新命令.
作为搜索使用像一个diff工具的为他人的替代答案MELD与git show
git difftool --tool=meld HEAD~..HEAD
Run Code Online (Sandbox Code Playgroud)
大多数时候我喜欢在命令行上看到我的小差异,因为它很快,但每隔一段时间我确实想启动一个差异工具来更深入地检查事情 - 尤其是其他人的工作。但这排除了使用的能力,.gitattributes因为这将成为默认行为。
为了显示特定的提交或分支,我在我的 ~/.gitconfig
[alias]
showm = "!f(){ if [ -z $1 ]; then c='HEAD'; else c=$1; fi; git difftool --tool=meld -y $c~..$c; }; f"
Run Code Online (Sandbox Code Playgroud)
这将启动 meld 以显示该提交引入的差异:
git showm <branch or hash>
Run Code Online (Sandbox Code Playgroud)
如果没有参数,它将HEAD用作默认值:
git showm
Run Code Online (Sandbox Code Playgroud)
作为奖励,您可以使用 bash 别名跟进,通过将其添加到分支名称来获取分支名称的制表符完成 ~/.bashrc
alias showm='git showm'
__git_complete showm _git_show
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2840 次 |
| 最近记录: |