有许多适用于 Windows 的优秀 GUI 差异工具(我使用 Araxis Merge 和 kDiff3),但没有一个(我能找到)会应用补丁文件。我希望它像这样工作:我在一个工具中打开一个基本文件和一个补丁。我应该在左侧获得基本文件的差异视图,以及在右侧应用补丁后该文件的外观。然后我可以将结果文件保存在某处(可能在清理冲突之后)。
这似乎是一件显而易见的事情,以至于我对我现有的工具没有做到这一点感到震惊。此功能是否存在于某处(对于 Windows?)
对于像 OS X 的Opendiff这样的 Git 存储库来说,最好的difftool 是什么?
我使用 vimdiff 作为我的 git difftool。
假设我已经更改了十二个文件。问题是有时我会在运行git diff第四个或第五个文件时看到一些我想编辑/更改的内容。有时我需要在此之外再做一些改变。问题是我不能只是:qa回到黑客攻击,因为在 vimdiff 中弹出了六到七个不同的差异。:qa每次我想中止 git diff 时都不查看所有这些文件,这真的很乏味。
有什么方法可以将 vimdiff 设置为 git 的 difftool,以便所有差异都在同一个 vim 实例中打开,例如在单独的选项卡中?
我使用“diff -y”命令逐行比较程序不同版本的 2 个结果。像这样:
1 1
123 | 234
asdf | qerq
Run Code Online (Sandbox Code Playgroud)
是否有多个文件的模拟,这将允许逐行比较 3 或 4 个文件?像这样:
1 1 1 1
123 | 234 | 345 | 234
asdf | qerq | qdfd | asdd
Run Code Online (Sandbox Code Playgroud) 有足够多的问题询问如何区分大文件,因为diff无法处理它们。
我想知道为什么GNU diff 无法处理它们。
我做了一个小实验。我比较了两个相同的数据集,就像这样
$ time /usr/bin/diff -u <(cat file1) <(cat file2) > /tmp/memoryhog
^C
real 5m6.478s
user 0m0.540s
sys 0m19.184s
Run Code Online (Sandbox Code Playgroud)
这是 top 在我取消工作的同时显示的内容:
3 PID %MEM VIRT SWAP RES CODE DATA SHR nMaj nDRT S PR NI %CPU COMMAND
19087 30.0 16.0g 9.4g 0.2m 16.0g 2.0m R 20 0.5 /usr/bin/diff -u /dev/fd/63 /dev/fd/62
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,输出是空的:
$ stat -c '%s' /tmp/memoryhog
0
Run Code Online (Sandbox Code Playgroud)
(它们实际上不是文件,而是数据库结果,我忘记跟踪diff当时实际消耗了多少字节- 估计每个管道文件 30-60GiB。)
但是那里发生了什么?
diff 当它甚至不需要跟踪单个字节更改时,是否正在分配大量内存?
我只能假设部分原因是必须跟踪行数,但是分配 16GiB 虚拟内存对于该任务来说似乎有点多!
是什么diff觉得需要那么多的内存?或者只是糟糕的内存处理? …
我希望能够区分两个页面的来源,甚至是在两个浏览器窗口中打开的纯文本文件。我唯一能找到的是Firefox的PageDiff插件,但是还有其他可用的东西吗(对于任何浏览器)?
例如,我有一个文本文件,每一行都是一个长字符串。我想排除这个字符串的 2 个“段”,比如第 1-7 和 20-22 列。所以下面的两行将是匹配的:
123456789012345678901234567890
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB
Run Code Online (Sandbox Code Playgroud)
我知道 WinMerge 有一个“IgnoreColumns”插件,但我从来没有这样做过。在本例中,我将其重命名为 IgnoreColumns_1-7, 20-22.dll,在插件菜单中选择它,然后选择“Pre-Differ”。但它从未奏效。
我将比较不想修改的大文件。我不反对在与 sed 或类似的比较中对它们进行流式编辑,但我不想修改实际文件。我还没有选择将 sed 提供给 diff 只是因为我希望获得更直观的数据视图。
我希望能够看到两个重复备份之间的差异。我知道有这个命令,verify但它只列出与最新备份不同的文件。如果我尝试list-current-files使用不同的备份日期然后执行diff它似乎无法按预期工作。
那么如何获得两个相邻备份之间已更改文件和新文件的列表?
谢谢!
是否可以从 git diff 或相关命令获取排除特定类别更改的报告?
我被要求审查一项更改,其中大量文件经历了相当于 s/2016/2017/g 的更改。(我们升级了第三方 jar,因此我们的许多导入现在引用了不同的包。)
是否有选项可以从命令行查看此差异,但抑制仅包含以下内容的所有更改,以便我可以专注于任何逻辑更改?
忽略:
-import com.example.2016_2.util.Utility
+import com.example.2017_2.util.Utility
Run Code Online (Sandbox Code Playgroud)
保持:
-Utility util = new Utility();
+Utility util = Utility.create();
Run Code Online (Sandbox Code Playgroud)
如果答案是编写我自己的脚本并通过git diff --porcelain或通过设置集成GIT_EXTERNAL_DIFF,我当然愿意;只是想知道是否
GIT_EXTERNAL_DIFF