文件夹之间的差异,而忽略文件名更改

时间:2016-05-15 21:20:26

标签: bash macos diff git-diff

如何在终端中使用diff但忽略文件名中的更改?

目前我正在做的事情:

diff -wrN folder1 folder2 | grep '^>' | wc -l

如何在两个提交ID之间执行git diff:

  • 忽略文件重命名
  • 只看java文件
  • 忽略特定文件夹名称,例如文件夹' a'和' b'
  • 执行grep&#39; ^&gt;&#39; | wc -l <​​/ li>

1 个答案:

答案 0 :(得分:0)

你似乎没有意识到这个问题的严重性,所以我想指出为什么这么难。

鉴于两个目录在开头是相同的,并且两个目录都包含1000个文件。现在,您可以在其中一个目录中重命名500个文件。 Renamings可能差别很大。最初名为foobar.txt的文件最初可以命名为DSC-3457.orig.jpg。如果不知道什么已被重命名为什么,diff命令就无法真正找到它。

此外,名为x的文件可以重命名为y,而名为y的文件可以重命名为x。在这种情况下,是否应将其视为仅仅重命名,或者是否仅仅交换了两个文件的内容,这甚至是值得怀疑的。

这意味着在 general 中你将遇到很大的问题来完成这个任务。标准工具不会开箱即用。

这就是说,我想指出哪些方面可以帮到你。

  1. 文件大小

    您可以按文件大小对所有文件进行排序,然后对这两个目录中的每一对进行diff排序。如果您所有的更改仅 重命名并且所有文件的大小不同,则此功能可以很好地工作。如果你有几个相同大小的文件(可能只是纯粹的机会,或者因为它们都是具有固定大小的相同格式),你再次遇到麻烦,必须比较每个可能的对相同规模的小组。

  2. GIT中的Diff

    您在代码中提到了git-diffgit实际上会保留记录,以防重命名文件。因此,如果您打算使用git diff,您可以在某种程度上依赖于git检测重命名的能力。这通常适用于删除文件并在一次提交中添加新名称的情况。如果在一次提交中添加了新名称,然后在另一次提交中删除了旧版本,则无法正常工作。在git diff中有更多关于重命名的知识;在这种情况下,请参阅man git diff并搜索rename,这里提到了大约十几个地方,因此我不会在此自行总结一下。

    编辑:您可以使用像git diff --find-renames --diff-filter=ACDMTUX这样的命令(即您允许所有类型的更改通过过滤器,但重命名除外)。