天道酬勤,学无止境

diff

如何使用shell脚本比较两个不同目录中具有相同名称的文件(How to compare files with same names in two different directories using a shell script)

问题 在继续使用 SVN 之前,我曾经通过简单地保留一个/develop/目录并在那里编辑和测试文件,然后将它们移动到/main/目录来管理我的项目。 当我决定迁移到 SVN 时,我需要确保目录确实是同步的。 那么,编写 shell 脚本 [bash] 来递归比较两个不同目录中的同名文件的好方法是什么? 注意:上面使用的目录名称仅用于示例。 我不建议将您的代码存储在顶级:)。 回答1 diff 命令有一个 -r 选项来递归比较目录: diff -r /develop /main 回答2 diff -rqu /develop /main 它只会以这种方式为您提供更改摘要:) 如果您只想查看新的/丢失的文件 diff -rqu /develop /main | grep "^Only 如果你想让它们裸露: diff -rqu /develop /main | sed -rn "/^Only/s/^Only in (.+?): /\1/p" 回答3 我可用的差异允许递归差异: diff -r main develop 但是使用 shell 脚本: ( cd main ; find . -type f -exec diff {} ../develop/{} ';' ) 回答4 [我在某处读到回答你自己的问题是可以的,所以这里是:)] 我试过这个,效果很好 [/]$ cd /develop/

2021-12-08 22:27:09    分类:技术分享    bash   shell   diff

使用 git 识别修订版中所有修改过的函数(Using git to identify all modified functions in a revision)

问题 有没有什么好方法可以用git来识别历史中每个修订版中所有修改过的函数? 我试过使用 -p 开关,但它的工作方式似乎与 svn 的 show-c-function 参数的工作方式不同。 我的假设是我想使用“git diff HEAD~i HEAD~i-1 -p”来增加 i 的值。 我是否遗漏了一些有助于确定 diff 对已修改函数的最佳猜测的参数? 回答1 这是在git diff * 中列出函数的神奇颂歌 git diff | \ grep -E '^(@@)' | \ grep "(" | \ sed 's/@@.*@@//' | \ sed 's/(.*//' | \ awk -F " " '{print $NF}' | \ uniq ......它的作用是...... 选择当前的差异, next 只选择带有 "hunk-headers" 的行, next 只选择带有左括号的行(可能包含函数名), 接下来忽略大块头, next 忽略左括号后的文本, next 只选择紧接在左括号之前的单词, 最后忽略列表中同一单词的多次出现。 瞧! 你有一个被当前git diff修改的函数列表。 * 在运行 bash 的 Ubuntu 16.04 上使用git version 2.7.4进行验证。 回答2 这是我认为你想要的快速而肮脏的尝试。 它做一个git log来显示所有的修订,

2021-12-05 05:02:57    分类:技术分享    git   function   diff   history   revision

foreach中的Array_diff?(Array_diff in foreach?)

问题 我需要比较一些数组中的值。 这个数组是多维的,我需要比较里面的数组。 这里是转储: php array (size=4) 1 => array (size=3) 0 => string '96' (length=2) 1 => string '90' (length=2) 2 => string '91' (length=2) 2 => array (size=3) 0 => string '96' (length=2) 1 => string '90' (length=2) 2 => string '91' (length=2) 3 => array (size=4) 0 => string '96' (length=2) 1 => string '90' (length=2) 2 => string '91' (length=2) 3 => string '98' (length=2) 4 => array (size=4) 0 => string '96' (length=2) 1 => string '90' (length=2) 2 => string '91' (length=2) 3 => string '98' (length=2) 我想使用类似array_diff东西来比较不同的数组,但是......即使看起来很愚蠢,我也不知道该怎么做。 我想我希望“提取”

2021-12-05 04:17:08    分类:技术分享    php   loops   diff

git gui - 可以显示UTF16吗?(git gui - can it be made to display UTF16?)

问题 有什么方法可以使git gui显示并以某种方式显示 UTF16 文件的差异? 我找到了一些信息,但这主要是指命令行而不是 gui。 回答1 我一直在努力从msysGit人帮助一个更好的解决方案,并已经提出了这种清洁/涂抹过滤器。 过滤器使用 Gnu 文件和 iconv 命令来确定文件的类型,并将其与 msysGit 的内部 UTF-8 格式相互转换。 这种类型的清洁/污迹过滤器为您提供了更大的灵活性。 在大多数情况下,它应该允许 Git 将您的混合格式文件视为 UTF-8 文本:diffs、merge、git-grep 以及 gitattributes 属性,如 eol-conversion、ident-replacement 和内置 diff 模式。 上面概述的差异过滤器解决方案仅适用于差异,因此受到的限制要大得多。 要设置此过滤器: 获取 Gnu libiconv 和文件,并安装两者。 确保 GnuWin32\bin 目录(通常是“C:\Program Files\GnuWin32\bin”)在你的 %PATH% 中将以下内容添加到 ~\Git\etc\gitconfig: [filter "mixedtext"] clean = iconv -sc -f $(file -b --mime-encoding %f) -t utf-8 smudge = iconv -sc

2021-11-30 17:58:48    分类:技术分享    git   diff   utf-16   git-gui

突出显示客户端上的文本差异?(Highlight text diff on client?)

问题 我想比较网页上的 2 个文本值并突出显示差异。 我可以在客户端执行此操作,最好使用 jQuery 或 Prototype 吗? 回答1 这个 diff-patch-match 库似乎做得很好: http://code.google.com/p/google-diff-match-patch/ 该项目有 JavaScript、C#、C++、Python 和 Java 实现,它们都做同样的事情。 回答2 查看 wikEd diff 库以及在线工具和演示。 该库使用块移动突出显示创建内联文本比较,并且基于字符/单词。 它已针对 Wikipedia 进行了优化,但对于其他文本类型和程序代码同样有效。 库代码是可定制的,具有 Unicode 支持,被广泛评论,并且是免费的 (PD)。

2021-11-30 15:06:00    分类:技术分享    javascript   diff

获取多个非连续提交的累积 git diffs(Get a cumulative git diffs for multiple non-consecutuve commits)

问题 我想知道是否有办法获得多个非连续提交的累积 git diff。 例如,我可以使用以下方法获取每次提交中的更改内容: git diff 123456^ 123456 其中“123456”是一个 git 哈希。 我可以进行多次提交。 但我现在想做多个差异并将输出合并为一个。 例如, git diff 123456^ 123456 git diff abcdef^ abcdef 但是将差异合并为一个。 但是“123456”和“abcdef”不是连续提交。 更新:假设文件 xyz 中的一行已更改: In commit 123456: from "foo" to "bar" in commit abcdef: from "bar" to "oof" 我只想看到它在提交之后从“foo”变为“oof”。 git diff 123456 abcdef对我不起作用,因为我不想在 123456 和 abcdef 之间进行所有更改。 我不想犯任何事; 只是想以此来审查代码的安全性。 回答1 我敢肯定有人有更聪明的方法,但是您可以尝试将所有选择的提交压缩为一个,然后对那个提交进行比较。 你可以通过做--cherry-pick和--no-commit来做到这一点。 获得最终结果后,您可以git diff HEAD来获取与基本版本的差异(假设您将自己重置到该位置)。 回答2 git diff

2021-11-30 14:57:31    分类:技术分享    git   github   diff

“最佳”差异算法 [关闭]('Best' Diff Algorithm [closed])

问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。 如果您觉得这个问题可以改进并可能重新打开,请访问帮助中心以获得指导。 10 年前关闭。 我需要在 VB.NET 中实现一个 Diff 算法来查找一段文本的两个不同版本之间的变化。 我在网上找了一个侦察员,发现了几种不同的算法。 这里有人知道我可以实现的“最佳”算法吗? 回答1 嗯,我在 codeproject 上使用了 c# 版本,它非常适合我想要的...... http://www.codeproject.com/KB/recipes/diffengine.aspx 如果您不能自己完成,您可能可以通过在线转换器将其翻译成 VB.net... 回答2 我喜欢 Eugene Myers 的 O(ND) 差分算法及其变体。 我相信这是 GNU diff 中使用的算法。 有关良好的背景,请参阅维基百科。 这是非常理论化的,您可能希望找到源代码,但我不知道 VB 中有任何源代码。 回答3 我不确定它是否是最好的差异算法,但您可能想查看那些讨论 SOCT4 和 SOCT6 的链接 http://dev.libresource.org/home/doc/so6-user-manual/concepts 并且: http://www.loria.fr/

2021-11-29 20:28:25    分类:技术分享    vb.net   diff

在 Unicode 文件 (MS Windows) 上的 Mercurial 中获取可读差异显示(Getting readable diff displays in Mercurial on Unicode files (MS Windows))

问题 我正在尝试将一些 Windows PowerShell 脚本存储在 Mercurial 存储库中。 PowerShell 编辑器似乎喜欢将文件保存为 UTF-16 Unicode。 这意味着有很多\0字节,这是 Mercurial 用来区分“文本”和“二进制”文件的。 我知道这对 Mercurial 存储数据的方式没有影响,但这确实意味着它显示了二进制差异,这有点难以阅读。 有没有办法告诉 Mercurial 这些真的是文本文件? 大概我需要说服 Mercurial 对特定文件类型使用外部 Unicode 感知差异程序。 回答1 这可能与您无关; 如果听起来不像,请阅读最后一段。 我不确定这是否是您所需要的,但我需要 UTF-16LE 内容的差异不仅仅是“二进制文件不同” - 当我几个月前搜索它时,我发现了一个线程和讨论它的错误; 这是其中的一部分。 我现在找不到这个迷你扩展的原始来源(尽管它正在做那个补丁所做的),但我得到的是一个扩展, BOM.py : #!/usr/bin/env python from mercurial import hg, util import codecs boms = [ codecs.BOM_UTF8, codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE, codecs.BOM_UTF32_BE, codecs

2021-11-29 18:08:42    分类:技术分享    windows   unicode   mercurial   diff   tortoisehg

git:具有提交限制的累积差异(git: cumulative diff with commit-limiting)

问题 git log有一些非常有用的提交限制选项,例如--no-merges --first-parent和--first-parent 。 在为一系列提交生成累积差异补丁/统计/数字统计时,我希望能够使用这些选项。 使用这些命令: git log --oneline --first-parent --no-merges --patch 29665b0..0b76a27 git log --oneline --first-parent --no-merges --stat 29665b0..0b76a27 git log --oneline --first-parent --no-merges --numstat 29665b0..0b76a27 差异不是累积的(每个提交的更改单独列出)。 使用这些命令: git diff --patch 29665b0..0b76a27 git diff --stat 29665b0..0b76a27 git diff --numstat 29665b0..0b76a27 差异是累积的,但不幸的是git diff不支持提交限制选项。 所以我想要的是git diff的累积差异功能与git log的提交限制功能相结合。 我的一个想法是使用git log生成提交哈希列表,然后以某种方式将该列表通过管道传输到git diff以生成指定提交的累积差异。

2021-11-28 15:45:51    分类:技术分享    git   diff

Is it possible to have all "git diff" commands use the "Python diff", in all git projects?

When including the line *.py diff=python in a local .gitattributes file, git diff produces nice labels for the different diff hunks of Python files (with the name of the function where the changes are, etc.). Is is possible to ask git to use this diff mode for all Python files across all git projects? I tried to set a global ~/.gitattributes, but it is not used by local git repositories. Is there a more convenient method than initializing each new git project with a ln -s ~/.gitattributes?

2021-11-28 15:28:57    分类:问答    python   git   diff   gitattributes