文件夹之间的差异同时忽略文件名更改
diff between folders whilst ignoring filename changes
如何在终端中使用 diff 而忽略文件名的更改?
目前我正在做的是:
diff -wrN folder1 folder2 | grep '^>' | wc -l
如何在两个提交 ID 之间进行 git 区分同时:
- 忽略文件重命名
- 只看java个文件
- 忽略特定的文件夹名称,例如文件夹 'a' 和 'b'
- 执行 grep '^>' | wc -l
你似乎没有意识到这个问题的难度,所以我想指出为什么这个问题如此困难。
给定两个开头相同的目录,并且都包含 1000 个文件。现在您重命名其中一个目录中的 500 个文件。重命名可能会有很大差异。原来叫foobar.txt
的文件,以后可以改名为DSC-3457.orig.jpg
。如果不知道什么已重命名为什么,diff 命令就无法真正再次找到它。
此外,名为 x
的文件可以重命名为 y
,而名为 y
的文件可以重命名为 x
。在这种情况下,这是否应该被视为仅仅是重命名,或者只是交换了两个文件的内容,甚至是值得怀疑的。
这一切都意味着在一般中你将有很大的问题来完成这个。标准工具不会开箱即用。
说到这里,我想指出两个方面,希望对您有所帮助。
文件大小
您可以按文件大小对所有文件进行排序,然后 diff
两个目录中的每一对。如果您所做的所有更改都是 仅 重命名并且所有文件的大小都不同,那么这可以很好地工作。如果你有几个相同大小的文件(可能是偶然的或者因为它们都是具有固定大小的相同格式),你又遇到麻烦了并且必须比较每个 possible一对相同大小的组。
Git-差异
您在标签中提到了 git-diff
。 git
实际上会保留记录以防文件被重命名。因此,如果您打算使用 git diff
,您可以在某种程度上依赖 git 检测重命名的能力。如果在一次提交中删除文件并使用新名称添加文件,这通常会起作用。如果在一次提交中添加了一个新名称,然后在另一次提交中删除了旧版本,这将无法正常工作。在 git diff
中还有很多关于重命名的知识需要学习;请参阅 man git diff
并搜索 rename
在这种情况下,大约有十几个地方提到了这一点,所以我不会在这里自己总结。
编辑:您可以使用像 git diff --find-renames --diff-filter=ACDMTUX
这样的命令(即,除了重命名之外,您让所有类型的更改都通过过滤器)。
如何在终端中使用 diff 而忽略文件名的更改?
目前我正在做的是:
diff -wrN folder1 folder2 | grep '^>' | wc -l
如何在两个提交 ID 之间进行 git 区分同时:
- 忽略文件重命名
- 只看java个文件
- 忽略特定的文件夹名称,例如文件夹 'a' 和 'b'
- 执行 grep '^>' | wc -l
你似乎没有意识到这个问题的难度,所以我想指出为什么这个问题如此困难。
给定两个开头相同的目录,并且都包含 1000 个文件。现在您重命名其中一个目录中的 500 个文件。重命名可能会有很大差异。原来叫foobar.txt
的文件,以后可以改名为DSC-3457.orig.jpg
。如果不知道什么已重命名为什么,diff 命令就无法真正再次找到它。
此外,名为 x
的文件可以重命名为 y
,而名为 y
的文件可以重命名为 x
。在这种情况下,这是否应该被视为仅仅是重命名,或者只是交换了两个文件的内容,甚至是值得怀疑的。
这一切都意味着在一般中你将有很大的问题来完成这个。标准工具不会开箱即用。
说到这里,我想指出两个方面,希望对您有所帮助。
文件大小
您可以按文件大小对所有文件进行排序,然后
diff
两个目录中的每一对。如果您所做的所有更改都是 仅 重命名并且所有文件的大小都不同,那么这可以很好地工作。如果你有几个相同大小的文件(可能是偶然的或者因为它们都是具有固定大小的相同格式),你又遇到麻烦了并且必须比较每个 possible一对相同大小的组。Git-差异
您在标签中提到了
git-diff
。git
实际上会保留记录以防文件被重命名。因此,如果您打算使用git diff
,您可以在某种程度上依赖 git 检测重命名的能力。如果在一次提交中删除文件并使用新名称添加文件,这通常会起作用。如果在一次提交中添加了一个新名称,然后在另一次提交中删除了旧版本,这将无法正常工作。在git diff
中还有很多关于重命名的知识需要学习;请参阅man git diff
并搜索rename
在这种情况下,大约有十几个地方提到了这一点,所以我不会在这里自己总结。编辑:您可以使用像
git diff --find-renames --diff-filter=ACDMTUX
这样的命令(即,除了重命名之外,您让所有类型的更改都通过过滤器)。