你似乎没有意识到这个问题的艰巨性,所以我想指出为什么这是如此困难。
给定两个目录,它们在开始时相等,并且都包含,例如,1000个文件。现在,您可以重命名其中一个目录中的500个文件。重命名可能有很大差异。一个名为
foobar.txt
最初可以命名
DSC-3457.orig.jpg
之后diff命令如果不知道重命名为什么,就无法再次找到它。
此外,名为
x
可以重命名为
y
,而文件调用
y
可以重命名为
x个
。在这种情况下,这是否应该被视为仅仅是重命名,或者仅仅是交换了两个文件的内容,这甚至值得怀疑。
这意味着
全体的
要做到这一点,你会遇到很大的问题。标准工具无法做到这一点。
这就是说,我想指出两个方面可能对你有所帮助。
-
文件大小
您可以按文件大小对所有文件进行排序,然后
diff
两个目录的每一对。如果您所做的所有更改都是
只有
重命名以及所有文件的大小是否不同。如果您有几个相同大小的文件(可能是完全偶然的,或者因为它们都是相同格式的固定大小文件),那么您又遇到了麻烦,必须对每个文件进行比较
可能的
同一尺寸组的一对。
-
Git差异
你提到过
git-diff
在标签中。
git
实际上会保留一条记录,以防文件被重命名。所以如果你打算使用
git diff
,您可以在一定程度上依赖git检测重命名的能力。如果在一次提交中删除并添加了一个新名称的文件,这通常会起作用。如果在一次提交中添加了新名称,然后在另一次提交时删除了旧版本,那么这将无法正常工作。关于重命名还有很多要学习的内容
差异比较
; 看见
man git diff
并搜索
rename
在这种情况下,大约有十几个地方提到了这一点,所以我不想在这里自己总结这一点。
编辑:可以使用如下命令
git diff --find-renames --diff-filter=ACDMTUX
(也就是说,您让所有类型的更改通过过滤器,但重命名除外)。