WinMerge - 忽略所有空格,包括换行符和格式更改

MHe*_*bes 14 git winmerge

使用 WinMerge 作为 difftool 时如何忽略“代码样式”更改?特别是跨越两次提交。

以便

thing
{
  a,
  b
}
Run Code Online (Sandbox Code Playgroud)

thing { a, b }
Run Code Online (Sandbox Code Playgroud)

将被视为相同。

本质上是这个问题,但针对的是 winmerge 而不是 diff。

.gitconfig

[diff]
    tool = winmerge
[difftool]
    prompt = false
[difftool "winmerge"]
    cmd = "$HOME/scripts/winmerge.sh" "$LOCAL" "$REMOTE"
[mergetool]
    prompt = false
    keepBackup = false
    keepTemporaries = false
[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e -u -fm -dl \"Local\" -dr \"Remote\" "$LOCAL" "$MERGED" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)

winmerge.sh只是打电话WinMergeU.exe -e -u -wr "$1" "$2"

似乎没有一个命令行选项适合,而且我认为行过滤器不起作用,因为它们是每行的。

Cha*_*lie 19

这个选项对我有用:

WinMerge -> 编辑 -> 选项 -> 比较 -> 常规:忽略空行;忽略回车符差异 (Windows/Unix/Mac)

ETC。

答案取自https://superuser.com/questions/174275/can-i-compare-only-file-contents

  • 问题是,当比较相同的文本时,如何获得相同的差异结果,其中一个文件中的文本是一长行,而另一个文件中的文本是分隔行(例如,为了适应列长度)。 (2认同)

MHe*_*bes 0

为了有更多时间回答我自己的问题:

  • 这对于 WinMerge 来说是不可能的
  • difftastic以速度和内存为代价来实现只读差异
  • 据我所知,没有工具可以在显示基于语义的差异时进行可写差异(例如冲突解决)

不完全存在的解决方案:

忽略空行;忽略回车符差异 (Windows/Unix/Mac)

这会忽略换行差异和完整空行差异,但不会在语义上比较文件。它在某些简单的情况下确实有帮助。

线路滤波器^\s*$

与“忽略空行”相同

.gitattributestextconv用于特定文件类型的格式化程序

这是只读差异的最接近的选项,其缺点是:

  • 需要为每种文件类型定义单独的属性(和格式化程序)
  • 显示文件的格式化版本而不是原始版本

我目前的解决方案

  • 为了解决冲突,请按原样使用 WinMerge,并尽可能多地打开“忽略”选项。无论您做什么,解决与格式更改的冲突都是一个巨大的痛苦,因此请尝试将格式更改隔离到它们自己的合并中。
  • 对于差异查看,请使用difftastic,它使用 tree-sitter 在 AST 级别而不是文本级别上比较代码
  • difftastic速度慢或占用内存时,回退到diff/WinMerge/VSCode