git diff
不支持不区分大小写的文件比较。谷歌显示很少有人要求该功能,而且也只能与其他一些git diff
开关结合使用,例如 with-G
或 with --color-words
。
我不在乎其他开关,只要git diff
可以显示不区分大小写的差异即可。
由于我没有看到任何具体的问题,而且我在研究这个问题一小时后找到了解决方案,所以我添加了这个问题和答案。
git diff
不支持不区分大小写的文件比较。谷歌显示很少有人要求该功能,而且也只能与其他一些git diff
开关结合使用,例如 with-G
或 with --color-words
。
我不在乎其他开关,只要git diff
可以显示不区分大小写的差异即可。
由于我没有看到任何具体的问题,而且我在研究这个问题一小时后找到了解决方案,所以我添加了这个问题和答案。
解决方案是使用git difftool
. 使用以下配置命令,我可以添加一个名为Git的自定义diff
工具以供使用:idiff
git config --global difftool.idiff.cmd 'diff -i $LOCAL $REMOTE'
通过这种自定义,我可以看到不区分大小写的比较,如下所示:
git difftool --tool idiff <other diff options> <Git references or files>
例如。
git difftool -t idiff HEAD~1 -- my_schema.sql
由于git difftool
每次在调用工具之前都会提示(是/否),因此请使用-y
switch fordifftool
或添加此配置选项以避免提示:
git config --global difftool.prompt 0
更新(2021 年 11 月 26 日):这是我使用的统一配置,它允许我使用git idiff
行为几乎与行为方式相同的命令git diff
。
git config --global difftool.idiff.cmd 'diff --unified=3 --color=always --ignore-case $LOCAL $REMOTE | less --raw-control-chars'
git config --global difftool.prompt 0
git config --global alias.idiff 'difftool --tool idiff'
为了扩展 Gurjeet Singh 的回答和 caw 的colordiff
评论,在 Windows 中,我做了以下操作将它们联系在一起:
如果需要,安装适用于 Windows 的 Strawberry Perl 发行版。任何 Windows Perl 发行版都应该可以工作,但 Strawberry Perl 是免费软件/开源软件,并附带电池。注意网站结果,因为有一个 NSFW 站点具有类似的域 IIRC。使用谷歌而不是猜测。
安装 MinGW/MSYS。Git for Windows 已经附带了 MSYS 的构建,因此您可以只使用它make
,但您的里程可能会有所不同。
下载并安装colordiff
Perl 脚本。我编辑了 Makefile 以将安装位置更改为~/bin
and ~/etc
(在哪里~
)%USERPROFILE%
,因为~/bin
它已经在我的PATH
. 根据需要进行调整。
(cmd.exe) 编辑您的注册表环境变量(在开始菜单中搜索环境变量)并添加.PL
到PATHEXT
(以及您在必要时bin/
使用的任何内容)。PATH
(cmd.exe) 创建一个 bash 脚本(例如,~/bin/colordiffless.bash
),将任何参数传递给colordiff.pl
(colordiff
接受 diff 选项并自动传递它们)并通过管道传递less
. 输出的颜色代码colordiff
是 ANSI,cmd.exe 无法理解,但less
可以。您还可以通过这种方式恢复 Git 的寻呼机行为(LESS
必要时配置环境变量)。
#!/bin/bash
colordiff.pl "$@" | less
像 Gurjeet 一样设置别名,但不是diff
直接调用,而是调用您的 bash 脚本。颜色代码输出是 ANSI,所以你需要一些东西来转换它们。我碰巧知道 MSYSless
会这样做,而且您还保留了 Git 的寻呼机行为!
git config --global difftool.cldiff.cmd "colordiffless.bash -ui $LOCAL $REMOTE"
(来自 cmd.exe,所以双引号是文字,$LOCAL
and$REMOTE
也是文字)
最后,为difftool
命令设置别名,以便您可以键入单个自定义命令而不是difftool
命令:
git config --global alias.cldiff "difftool -y -t cldiff"
我误认为寻呼机行为回来了。difftool
为每个文件调用命令,因此您将获得每个文件的分页器,而不是每个差异都获得一个分页器输出。为了解决这个问题,您可能想要包装difftool -y
一个脚本并将其整个输出传递给less
。
有点固定 - 不需要在补丁中有无用的颜色:
git config --global difftool.idiff.cmd 'diff --unified=3 --color=never --ignore-case $LOCAL $REMOTE | less --raw-control-chars'
git config --global difftool.prompt 0
git config --global alias.idiff 'difftool --tool idiff'
然后应该可以生成漂亮的 HTML 例如
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8" />
<!-- Make sure to load the highlight.js CSS file before the Diff2Html CSS file -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.1/styles/github.min.css" />
<link
rel="stylesheet"
type="text/css"
href="https://cdn.jsdelivr.net/npm/diff2html/bundles/css/diff2html.min.css"
/>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/diff2html/bundles/js/diff2html-ui.min.js"></script>
</head>
<script>
function show(diffString) {
var targetElement = document.getElementById('myDiffElement');
var configuration = {
drawFileList: true,
fileListToggle: false,
fileListStartVisible: false,
fileContentToggle: false,
matching: 'lines',
outputFormat: 'side-by-side',
synchronisedScroll: true,
highlight: true,
renderNothingWhenEmpty: false,
};
var diff2htmlUi = new Diff2HtmlUI(targetElement, diffString, configuration);
diff2htmlUi.draw();
diff2htmlUi.highlightCode();
}
</script>
<body>
<div id="myDiffElement"></div>
<textarea onchange="show(this.value)" rows=30 cols=160></textarea>
</body>
</html>