你知道任何有助于这样做的图书馆吗?
我会编写一个函数,以统一的diff格式打印两个多行字符串之间的差异.像这样的东西:
def print_differences(string1, string2):
"""
Prints the comparison of string1 to string2 as unified diff format.
"""
???
Run Code Online (Sandbox Code Playgroud)
用法示例如下:
string1="""
Usage: trash-empty [days]
Purge trashed files.
Options:
--version show program's version number and exit
-h, --help show this help message and exit
"""
string2="""
Usage: trash-empty [days]
Empty the trash can.
Options:
--version show program's version number and exit
-h, --help show this help message and exit
Report bugs to http://code.google.com/p/trash-cli/issues
"""
print_differences(string1, string2)
Run Code Online (Sandbox Code Playgroud)
这应该打印出类似的东西:
--- string1
+++ string2 …Run Code Online (Sandbox Code Playgroud) 我在Windows中有一个kdiff3比较,我想将比较保存为统一diff格式的文本文件.
我意识到这是一个奇怪的问题.通常,人们已经掌握了文本差异,并希望在kdiff3中以图形方式查看.
我在Windows中使用了...... 不寻常的 ......版本控制工具,它可以比较版本并在kdiff3中显示比较.但是,在生成的Unix友好的输出,至少对非ClearCase的,忍者像我决然不友好.
我真正真正喜欢的是以统一的diff格式获得比较的输出,所以我可以使用类似patch或类似的工具.我并不特别喜欢ClearCase,我很乐意尽可能地让它独自一人.
kdiff3可以采用现有的比较并将其导出为统一的差异格式吗?
我正在尝试检查线路之间的差异。这是我的代码:
from difflib import unified_diff
s1 = ['a', 'b', 'c', 'd', 'e', 'f']
s2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'k', 'l', 'm', 'n']
for line in unified_diff(s1, s2):
print line
Run Code Online (Sandbox Code Playgroud)
它打印:
---
+++
@@ -4,3 +4,9 @@
d
e
f
+g
+i
+k
+l
+m
+n
Run Code Online (Sandbox Code Playgroud)
“a”、“b”和“c”发生了什么?谢谢!
例如,如果我有两个文件:
文件1:
This is file 1
Run Code Online (Sandbox Code Playgroud)
和file2:
This is file 2
Run Code Online (Sandbox Code Playgroud)
并使用以下命令创建补丁:
diff -u file1 file2 > files.patch
Run Code Online (Sandbox Code Playgroud)
结果是:
--- file1 Fri Aug 13 17:53:28 2010
+++ file2 Fri Aug 13 17:53:38 2010
@@ -1,1 +1,1 @@
-This is file 1
+This is file 2
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试在Solaris上使用patch命令应用此补丁:
patch -u -i files.patch
Run Code Online (Sandbox Code Playgroud)
它挂在:
Looks like a unified context diff.
File to patch:
Run Code Online (Sandbox Code Playgroud)
1.有没有办法将Solaris 本机补丁命令与统一差异一起使用?
2.如果无法应用统一格式,哪种差异格式被认为是最便携的?
更新:
我在问题的第一部分找到了答案.patch如果第二个文件(在这种情况下为file2)与第一个文件(file1)存在于同一文件夹中,那么Solaris上似乎会挂起.例如,以下相当常见的差异:
--- a/src/file.src Sat Aug 14 23:07:29 2010
+++ b/src/file.src Sat Aug 14 …Run Code Online (Sandbox Code Playgroud) 天儿真好,
编辑:我想提一下,这个有点长的问题现在已经解决了,感谢Adam Goode在下面的回答,如果你只是在经过时略读.
我已经获得了一个补丁添加到Apache 2.2.14,并且一个统一的差异根本没有修补文件.我正在使用GNU补丁2.5.4.
我必须忽略空格,因为原始补丁不能很好地完成,即许多差异似乎是用于制表符 - >空格转换.这些差异甚至不太有用,因为补丁文件已经在交付链的某处修改过,例如svn repository,Jira system,web interface等,所以所有选项卡都已转换为空格了!
我在Solaris 10上使用的命令是:
/usr/bin/gpatch --verbose --ignore-whitespace -p1 -d . \
<mod_cache.diff
Run Code Online (Sandbox Code Playgroud)
输出是:
...
Hmm... The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: httpd/modules/cache/mod_cache.h
|===================================================================
|--- httpd/modules/cache/mod_cache.h
|+++ httpd/modules/cache/mod_cache.h
--------------------------
Patching file modules/cache/mod_cache.h using Plan A...
Hunk #1 succeeded at 24.
Hunk #2 succeeded at 86.
Hunk #3 succeeded at 138.
Hunk #4 succeeded at 163.
Hunk #5 succeeded at …Run Code Online (Sandbox Code Playgroud) 我正在使用 TortoiseSVN 1.7 并希望在两个修订版之间创建补丁文件。
我已经搜索过,但是这些线程How do I create a patch from diff between revisions using TortoiseSVN? 在两个修订版之间创建补丁对我来说不起作用,因为Show changes as unified diff会生成非常简单的文件(不是补丁文件)。就像是
索引: myfile.txt
=================================================== =================
我在《查看差异》中读到
如果您想在一个视图中查看特定修订版中对所有文件所做的更改,可以使用 Unified-Diff 输出(GNU 补丁格式)。这仅显示了几行上下文的差异。它比视觉文件比较更难阅读,但会一起显示所有更改。从“修订日志”对话框中选择感兴趣的修订,然后从上下文菜单中选择“将差异显示为统一差异”。
我想创建一个包含有用差异信息的单个补丁文件(或根据修改的文件的许多补丁文件)(例如菜单上下文 TortoiseSVN -> 创建补丁...)
是否有一个库可以从diff2html可以使用的两个字符串中生成统一的差异?我试过difflib但输出似乎不符合 diff2html 需要的要求。我需要一个 .js 库,我可以在网页中导入以生成 JSON 之间的差异。
尝试使用该lineterm参数,但无法使该工具正常工作。如果我使用文档中的字符串作为示例,那么它可以工作:
--- a/server/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go\n+++ b/server/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go\n@@ -1035,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (\n \n // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n \n+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n+\tr0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n+\tn = int(r0)\n+\tif e1 != 0 …Run Code Online (Sandbox Code Playgroud) 如何通过git-config配置统一上下文,以便我不必总是为-U或--unified选项提供值?
unified-diff ×8
diff ×3
patch ×3
difflib ×2
python ×2
c ×1
diff2html ×1
git ×1
git-config ×1
git-diff ×1
javascript ×1
kdiff3 ×1
revision ×1
solaris ×1
tortoisesvn ×1