如何在终端中使用diff但忽略文件名中的更改?
目前我正在做的事情:
diff -wrN folder1 folder2 | grep '^>' | wc -l
如何在两个提交ID之间执行git diff:
答案 0 :(得分:0)
你似乎没有意识到这个问题的严重性,所以我想指出为什么这么难。
鉴于两个目录在开头是相同的,并且两个目录都包含1000个文件。现在,您可以在其中一个目录中重命名500个文件。 Renamings可能差别很大。最初名为foobar.txt
的文件最初可以命名为DSC-3457.orig.jpg
。如果不知道什么已被重命名为什么,diff命令就无法真正找到它。
此外,名为x
的文件可以重命名为y
,而名为y
的文件可以重命名为x
。在这种情况下,是否应将其视为仅仅重命名,或者是否仅仅交换了两个文件的内容,这甚至是值得怀疑的。
这意味着在 general 中你将遇到很大的问题来完成这个任务。标准工具不会开箱即用。
这就是说,我想指出哪些方面可以帮到你。
文件大小
您可以按文件大小对所有文件进行排序,然后对这两个目录中的每一对进行diff
排序。如果您所有的更改仅 重命名并且所有文件的大小不同,则此功能可以很好地工作。如果你有几个相同大小的文件(可能只是纯粹的机会,或者因为它们都是具有固定大小的相同格式),你再次遇到麻烦,必须比较每个可能的对相同规模的小组。
GIT中的Diff
您在代码中提到了git-diff
。 git
实际上会保留记录,以防重命名文件。因此,如果您打算使用git diff
,您可以在某种程度上依赖于git检测重命名的能力。这通常适用于删除文件并在一次提交中添加新名称的情况。如果在一次提交中添加了新名称,然后在另一次提交中删除了旧版本,则无法正常工作。在git diff
中有更多关于重命名的知识;在这种情况下,请参阅man git diff
并搜索rename
,这里提到了大约十几个地方,因此我不会在此自行总结一下。
编辑:您可以使用像git diff --find-renames --diff-filter=ACDMTUX
这样的命令(即您允许所有类型的更改通过过滤器,但重命名除外)。