我有兴趣看到一个很好的差异算法,可能在Javascript中,用于渲染两个HTML页面的并排差异.我们的想法是diff会显示渲染 HTML 的差异.
为了澄清,我希望能够将并排差异视为渲染输出.因此,如果我删除一个段落,并排视图将知道正确的空格.
@Josh完全正确.虽然它可能会显示删除的文本为红色或其他东西.我的想法是,如果我为我的HTML内容使用WYSIWYG编辑器,我不希望必须切换到HTML来做差异.我希望与两个WYSIWYG编辑并排.或者至少在最终用户友好的事情中并排显示差异.
我想使用'diff'来获得字符差异和字符差异.例如,考虑:
档案1
abcde
abc
abcccd
Run Code Online (Sandbox Code Playgroud)
档案2
abcde
ab
abccc
Run Code Online (Sandbox Code Playgroud)
使用diff -u我得到:
@@ -1,3 +1,3 @@
abcde
-abc
-abcccd
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)
但是,它只向我显示这些行的变化.我希望看到的是:
@@ -1,3 +1,3 @@
abcde
-ab<ins>c</ins>
-abccc<ins>d</ins>
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)
你得到我的漂移.
现在,我知道我可以使用其他引擎来标记/检查特定线路上的差异.但我宁愿使用一种可以完成所有工作的工具.
使用git时,有没有办法显示对分支的提交,而忽略了通过合并引入的所有提交?
我正在尝试检查在分支上进行的代码更改,而忽略了我们在合并的其他分支上所做的更改.我知道这几乎不可能以这种方式显示差异,但我希望能够找出我需要审核的提交.
因此,实用程序Diff就像我想要的2个文件一样工作,但是我有一个项目需要一次比较多个文件,一次最多10个文件.这需要将所有这些文件并排放在一起.我的研究并没有真正发现任何东西,vimdiff似乎是迄今为止最好的,能够一次比较4个.
我的问题:是否有任何实用程序可以一次比较2个以上的文件,或者是一种破解diff/vimdiff的方法,以便它可以进行多重比较?我将要比较的文件相对较短,所以它不应该太慢.
提前致谢!
是否存在类似于Unix程序diff的Java实用程序库,但对于Objects?我正在寻找可以比较两个相同类型的对象并生成表示它们之间差异的数据结构的东西(并且可以递归地比较实例变量中的差异).我不是在寻找文本差异的Java实现.我也没有寻求有关如何使用反射来做到这一点的帮助.
我正在维护的应用程序有一个脆弱的实现这个功能,有一些糟糕的设计选择,需要重写,但如果我们可以使用现成的东西会更好.
这是我正在寻找的那种事情的一个例子:
SomeClass a = new SomeClass();
SomeClass b = new SomeClass();
a.setProp1("A");
a.setProp2("X");
b.setProp1("B");
b.setProp2("X");
DiffDataStructure diff = OffTheShelfUtility.diff(a, b); // magical recursive comparison happens here
Run Code Online (Sandbox Code Playgroud)
比较之后,实用程序会告诉我"prop1"在两个对象之间是不同的,"prop2"是相同的.我认为DiffDataStructure最自然的是树,但如果代码可靠,我不会挑剔.
在HEAD(最新提交)中,我有一个名为的文件foo.在我当前的工作树中,我将其重命名为bar,并对其进行了编辑.
我希望git diff foo在HEAD和bar我目前的工作树.
所以我想将此文件夹 http://cloudobserver.googlecode.com/svn/branches/v0.4/Boost.Extension.Tutorial/libs/boost/extension/与此 进行比较http://svn.boost.org/svn/boost/sandbox/boost/extension/.我希望得到一个diff文件.这些文件夹是在svn控制下,但我更喜欢git样式的diff文件(如此处所示)我试过,git diff但它似乎不适用于web文件夹.那么如何在Linux上使用一个命令做同样的事情呢?
更新: 所以我们得到了一个很好的答案.但它的工作原理很奇怪 - 在我看来它显示所有文件(相同的文件)都用相同的内容替换了所有的内容(虽然我确信只有3-4条代码行被改变了)...
更新2: 为了实现我真正需要的东西(在Linux上使用git样式,只有真正改变的行的dif文件):
$ svn export http://cloudobserver.googlecode.com/svn/branches/v0.4/Boost.Extension.Tutorial/libs/boost/extension/ repos2 --native-eol CRLF
$ svn export http://svn.boost.org/svn/boost/sandbox/boost/extension/ repos --native-eol CRLF
$ git diff repos repos2 > fileWithReadableDiff.diff
Run Code Online (Sandbox Code Playgroud) 我的机器上有一个存储库的工作副本,我知道它已在服务器上更新.我想知道如何通过使用svn命令行参数来获取新版本和工作副本中的版本之间的区别.
有没有办法让我这样做?
在Fedora Constantine盒子上工作.我diff递归地查看两个目录以检查源更改.由于项目的设置(在我自己参与所述项目之前!叹息),目录包含源和二进制文件,以及大型二进制数据集.虽然diffing最终可以在这些目录上运行,但如果我可以忽略二进制文件,则可能需要20秒.
据我了解,DIFF没有一个"忽略二进制文件"模式,但确实有一个忽略的参数,它会忽略正则表达式中的文件.我不知道在那里写什么来忽略二进制文件,无论扩展名如何.
我正在使用以下命令,但它不会忽略二进制文件.有谁知道如何修改此命令来执行此操作?
diff -rq dir1 dir2
diff ×10
git ×4
html ×2
svn ×2
bash ×1
binaryfiles ×1
branch ×1
command-line ×1
file ×1
highlight ×1
java ×1
javascript ×1
linux ×1
merge ×1
n-way-merge ×1
shell ×1
text ×1
vim ×1
vimdiff ×1
word-diff ×1