git 如何列出两次提交之间的所有文件和目录重命名

git How to list all file and directory renames between two commits

我正在编写一个使用 git 的脚本。它需要知道所有重命名的目录和文件的旧文件路径和新文件路径。

我想做的事的例子:git diff --find-renames-only someGitHash someGitHash 然后我想看到一个像这样的列表:

rename old/path/old-file-name.extension->new/path/new-file-name.extension

rename from source/README.md
rename to documentation/README.md

或者类似这样的东西,只要它具有旧文件名和旧目录路径以及新文件名和每个新目录路径即可。

我到处乱找,到目前为止我能找到的最接近的东西是 git diff --find-renames

git diff --find-renames 给了我想要的数据,但每个文件的数据太多了。这绝对不是我想要处理和解析的东西。我正在使用的一些 git 存储库可能有数千个 file/folder 重命名...

示例:

...tons more data that I do not want to parse through
rename from source/README.md
rename to documentation/README.md
...tons more data including diffs of files before and after... 

this pattern continued for each file...

如何在没有额外数据的情况下列出两次 git 提交之间的所有文件和目录重命名?

任何帮助将不胜感激,谢谢!

git log --name-status <start_commit>..<end_commit> | grep ^R

这将显示从新到旧的重命名历史。

输出如下所示:

R100    the-5-min/.watchmanconfig       the-10-min/.watchmanconfig
R100    the-5-min/App.tsx       the-10-min/App.tsx
R085    the-5-min/app.json      the-10-min/app.json
R100    the-5-min/assets/examples/accordion.png the-10-min/assets/examples/accordion.png
R100    the-5-min/assets/examples/angular-gradient.png  the-10-min/assets/examples/angular-gradient.png

第一个字母是变化的类型(不同变化类型的详细信息见--diff-filter),数字是提交之间的相似程度。列出的第一个文件名是旧文件名,第二个文件名是新文件名。