Tim*_*Tim 2 git diff rename git-diff file-rename
我正在编写一个使用 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
Run Code Online (Sandbox Code Playgroud)
或者类似的东西,只要它具有带有旧目录路径的旧文件名和带有新目录路径的新文件名。
到目前为止,我到处乱逛和搜索,我能找到的最接近的东西是git diff --find-renames
git diff --find-renames为我提供了我想要的数据,但每个文件的数据太多。这绝对不是我想要处理和解析的事情。我正在使用的一些 git 存储库可能有数千个文件/文件夹重命名...
例子:
...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...
Run Code Online (Sandbox Code Playgroud)
如何在没有额外数据的情况下列出两次 git 提交之间的所有文件和目录重命名?
任何帮助将不胜感激,谢谢!
git log --name-status <start_commit>..<end_commit> | grep ^R
Run Code Online (Sandbox Code Playgroud)
这将向您显示从最新到最旧的重命名历史记录。
输出如下所示:
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
Run Code Online (Sandbox Code Playgroud)
第一个字母是更改的类型(有关不同更改类型的详细信息,请参阅--diff-filter),数字是提交之间的相似程度。列出的第一个文件名是旧文件名,第二个文件名是新文件名。