是否有一个命令行程序,提供递归的基于字的差异(在2个目录上)?
diff -u是递归的,但它没有逐字逐句比较.wdiff并且dwdiff基于单词的diff,但没有内置的递归diff选项.
我想将结果传递给colordiff一个生成输出的程序,该输出可以colordiff理解特别有用.有什么建议?谢谢!
CC
只是试图让差异更好地适用于某些类型的文档.例如,对于LaTeX,我可能有一个长段,严格只有一行,但我不想看到整个段落,如果只是一个句子被改变.特别是如果我正在运行某种版本控制并且共同作者编辑与我相同的段落(但不是相同的句子).我不希望这表现为冲突.
这是次要问题.主要问题是我是否可以使用差异来逐句查找.谢谢.
编辑
wdiff几乎是完美的.但有合并等方法,因为diff用了diff3?
我希望git diff输出所有文件的常规差异,除了*.tex.对于*.tex文件,我想看看输出git diff --word-diff.
我和玩弄.gitattributes和.gitconfig,但我得到了最远的是得到一个.tex文件中的部分显示,随后坠毁.
有可能得到这种行为吗?
我的.gitattributes:
*.tex diff=latex
Run Code Online (Sandbox Code Playgroud)
.gitconfig:
[diff "latex"]
wordRegex = "\\\\[a-zA-Z]+|[{}]|\\\\.|[^\\{}[:space:]]+"
command = ~/bin/word-diff.sh
Run Code Online (Sandbox Code Playgroud)
并且word-diff.sh:
#!/bin/sh
git --no-pager diff --color-words "$2" "$5"
Run Code Online (Sandbox Code Playgroud) 为了说明问题:参见diff
本段中唯一的差异(从A macro that needs空格差异开始(在某些地方插入/删除换行符);
git diff它显示红色之前的段落和红色之后的段落,这使得很难发现差异git diff --word-diff,它显示灰色后的段落,并且不显示空白更改git diff --word-diff-regex=.它运行时显示空白变化(太棒了!)但是[编辑]它通过字符差异来做字符,这通常是不可读的,因为它混合来自不同单词的字母以最小化差异,例如:
git show --word-diff-regex=. 4a720394bba39ce1e67d518b909cbb1c25f63d09
[- * patch compile-]r [-so `isM-]a[-inModule`-] [-is true when -d:isMainModuleIsAlwaysTr-]{+m+}u[-e-]
[- T-]{+c+}h[-at'll give speedup-] be[-nefi-]t[-, and we don'-]t[- hav-]e{+r+} [-to p-]{+w+}a[-tch stdlib files-]{+y+}.
]#
我想要的是在运行时显示空白差异的选项--word-diff(或--word-diff-regex),例如通过{+ +}和[- -]; 注意:因为--word-diff=color很好地展示这些,例如也通过{+ +},[- -]否则这些将消失.
注意:我在gitconfig中使用颜色.
注意:这没有用,因为输出中没有显示空白差异git diff --word-diff=porcelain
我知道git diff --word-diff=color在工作树和HEAD之间显示了一个字差异,但有没有办法获得相同类型的输出git log?
我遇到了git diff --word-diff的问题.问题是当diff获取没有换行符的文件(一个行文件)时,它会逐行区分.我希望逐字区分.
这是当我在没有换行符的情况下比较文件时会发生什么:
git diff -a --word-diff=plain file1 file2
diff --git a/file1 b/file2
index 3526254..0515a63 100644
--- a/file1
+++ b/file2
@@ -1 +1 @@
[- a a a a a a a a a a-]
No newline at end of file
{+a a a a a ab a a a a+}
Run Code Online (Sandbox Code Playgroud)
如果我在文件的末尾添加换行符,一切都按预期工作:
git diff -a --word-diff=plain file1 file2
diff --git a/file1 b/file2
index 1756d83..1ec45b9 100644
--- a/file1
+++ b/file2
@@ -1,2 +1,2 @@
a a a a a [-a …Run Code Online (Sandbox Code Playgroud) 我正在使用 Git 对散文进行版本化,并且一直在尝试git diff --word-diff查看行内的更改。我想使用脚本中生成的结果。
但是--word-diff识别单词的默认方式似乎有缺陷。所以我一直在尝试各种--word-diff-regex=选择。
以下是我试图解决的两个主要缺陷:
添加的空格似乎被忽略了。但是如果尝试以编程方式使用结果,空格可能非常重要。
例如,从 Markdown (.md) 文件中获取此标头:
# Test file
Run Code Online (Sandbox Code Playgroud)
现在,让我们在它的末尾添加一些文本:
# Test file in Markdown
Run Code Online (Sandbox Code Playgroud)
如果我运行git diff --word-diff这个:
# Test file {+in Markdown+}
Run Code Online (Sandbox Code Playgroud)
但是“in”一词之前的空格并未作为差异的一部分包含在内。
空行被完全忽略。
这git diff是文件内容的标准,我删除了一行并添加了几行新行——一个是空的,另一个带有文本“这是一个新行”。
This is a test file to see how word diff responds in certain situations.
-
I'll try removing lines and adding them to see what happens.
Here's another line so we can see what happens …Run Code Online (Sandbox Code Playgroud)我有两段文字.我想在它们之间做一个基于单词的差异(就像当unix实用程序wdiff那样),但输出中有更多信息(我的意思是,添加/删除单词开始的字符的位置).
我需要在Java中执行此操作,因此差异的简单输出(如wdiff)不适合我:我想操纵表示差异的对象.
我想git diff将常规逐行diff与结合在一起git diff --word-diff。逐行比较的问题在于,如果我更改一个或两个单词并使该行基本保持原样,则它们是不必要的-分块过于粗糙。另一方面,如果我改变整行并使用--word-diff,有时diff算法将变得混乱并吐出令人难以置信的diff,插入和删除了大量单词以将一行“变形”为另一行。
是否有一种方法可以指定git应该对此明智的方法,并且仅--word-diff在这样做确实有意义时(当然,逐行)?
我需要编辑一个凌乱的commit提交,该提交只会在随后的几行中更改一个单词,保留其中一些更改,而删除其他更改。这些更改很容易在中看到git diff --word-diff,并且以这种格式,我可以轻松地编辑大块以完成我打算做的事情,但是现在我有了一个像这样的文件
diff --git a/cldf/forms.csv b/cldf/forms.csv
index 46c12a4..0374ece 100644
--- a/cldf/forms.csv
+++ b/cldf/forms.csv
@@ -1783,8 +1783,8 @@ ID,Lect_ID,Concept_ID,Form_according_to_Source,Form,Local_Orthography,Segments,C
1782,adan1251-lawah,day,dil?l?,dil?l?,dilele,d i l ? l ?,Lit. 'all day'.,datasets_Adang_Lawahing_tsv
1783,adan1251-lawah,day,w?d saha,w?d_saha,wed saha,w ? d _ s a h a,midday' lit. 'hot sun',datasets_Adang_Lawahing_tsv
1784,adan1251-lawah,morning,lalami,lalami,lalami,l a l a m i,,datasets_Adang_Lawahing_tsv
1785,adan1251-lawah,yesterday,?u:mi,?u?mi,[-umi-]{+'umi+},? u? m i,,datasets_Adang_Lawahing_tsv
1786,adan1251-lawah,day_before_yesterday,?otari? alumi,?otari?_alumi,[-otaring-]{+'otaring+} alumi,? o t a r i ? _ a l u m i,,datasets_Adang_Lawahing_tsv
1787,adan1251-lawah,tomorrow,dil?l?,dil?l?,dilele,d i l ? l ?,,datasets_Adang_Lawahing_tsv
1788,adan1251-lawah,day_after_tomorrow,a:lu,a?lu,alu,a? l u,,datasets_Adang_Lawahing_tsv
1789,adan1251-lawah,twilight_dawn,lalami,lalami,lalami,l a l a …Run Code Online (Sandbox Code Playgroud) git diff有--word-diff-regex=<...>匹配单词的选项。某些语言有特殊的默认值(如 中所述man 5 gitattributes)。但这些是什么?文档中没有描述,我查找了 的来源git,也没有找到它们。
有任何想法吗?
编辑:我在git 1.9.1,但我会接受任何版本的答案。
word-diff ×11
git ×7
diff ×5
git-diff ×2
regex ×2
git-apply ×1
java ×1
line-by-line ×1
whitespace ×1