由于git
是针对源代码设计的,因此其默认diff
算法将行视为最小不可分割单位。
我正在尝试编辑一些包含在第80列自动换行的降价文件。添加句子可能会导致段落的其余部分被标记为已更改。
有没有办法让Git使用更适合文本的diff算法?我需要一个将单词或句子视为不可分割单位而不是行的单词吗?
答案 0 :(得分:21)
您可以尝试使用git diff --word-diff
。
$ git diff --word-diff
diff --git a/test.txt b/test.txt
index 54585bb..a8cd97e 100644
--- a/test.txt
+++ b/test.txt
@@ -1,7 +1,7 @@
Because git is designed for source code, its diff algorithms {+are bibbity +}
{+bobbity boo+} treat a line as the minimum indivisible unit. I am trying to edit
some markdown files that are word wrapped at column 80. Adding a sentence can
cause the rest of the paragraph to be marked as changed.
Is there a way to have Git use a diff algorithm more suited to text? One that
treats words or sentences as indivisible units rather then lines?
No newline at end of file
答案 1 :(得分:11)
也许您正在寻找word-diff
- word-diff [=
<mode>
]使用
<mode>
来显示单词diff 划定改变了的词。默认情况下, 单词由空格分隔;看到 --word-diff-regex如下。<mode>
默认为plain,必须是以下之一:颜色
仅使用突出显示更改的单词 颜色。意味着 - 颜色。
普通
将单词显示为[-removed-]和 {添加}。没有企图逃脱 分隔符,如果它们出现在 输入,所以输出可能不明确。
瓷器使用特殊的基于行的格式 用于脚本消费。 添加/删除/未更改的运行 以通常的统一差异打印 格式,以+ / - /
开头 线条开头的字符 并延伸到行尾。 表示输入中的换行符 通过波浪线〜在自己的线上。
无
再次禁用字差异。
请注意,尽管名称如此 第一种模式,颜色用于突出显示 所有模式中的更改部件如果 启用。
答案 2 :(得分:7)
以下是自定义此内容的示例(来自this question)。默认情况下,--word-diff假定一个单词是一个非空白字符串。以下命令将考虑包含以下内容之一的单词:
命令:
git diff --color-words --word-diff-regex='[A-z0-9_]+|[^[:space:]]'