You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取文件夹历史记录中的所有重命名信息?

解决git filter-repo提取文件夹历史时获取文件旧名称的问题

你想用git filter-repo提取某个文件夹及其完整历史,但工具本身不追踪重命名,得手动指定文件曾经的旧路径才能保留对应历史。你考虑过遍历文件夹里的每个文件,用git log --follow解析重命名记录,但想知道有没有更便捷的方法。

以下是几种更高效的方案:

批量扫描所有重命名记录

不用逐个文件执行命令,直接用git log批量筛选出涉及目标文件夹的重命名操作:

git log --diff-filter=R --name-status --all -- ./target-folder/
  • --diff-filter=R:只筛选包含重命名操作的提交
  • --name-status:输出操作类型和文件路径
  • --all:扫描所有分支的历史
  • ./target-folder/:指定要关注的目标文件夹

输出里的R开头的行就是重命名记录,格式是R100 旧路径 新路径(100表示文件内容完全匹配),你可以直接提取这些旧路径,后续给git filter-repo的--path参数用。

用git rev-list + git show深度扫描

如果上面的命令漏了一些历史,还可以用更底层的方式扫描所有提交的文件变更:

git rev-list --all | xargs -I {} git show --name-status {} | grep -B1 -A1 "R[0-9]*\s" | grep -E "(^R|target-folder)"

这个命令会遍历所有提交,找出带重命名标记的记录,再过滤出和目标文件夹相关的内容,适合更复杂的历史场景。

对比逐个文件的方法

你提到的遍历每个文件执行git log --follow的方法虽然可行,但效率较低——每个文件都要单独发起一次git命令,当文件夹里文件较多时会很慢。上面的批量命令只需要几次调用就能拿到所有相关重命名记录,显然更高效。

另外,如果是整个文件夹被重命名过,还可以直接用git filter-repo的--path-rename参数,比如:

git filter-repo --path-rename old-folder/:new-folder/

这种情况不用逐个指定文件,直接映射文件夹的新旧名称即可。

内容的提问来源于stack exchange,提问作者ChrisW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:25:26