【问题标题】:Why does git log --name-only downloads further objects for repos with --filter=blob:none为什么 git log --name-only 使用 --filter=blob:none 为 repos 下载更多对象
【发布时间】:2022-08-18 23:02:33
【问题描述】:

鉴于我克隆了一个存储库:

git clone --filter=blob:none --no-checkout <url>

现在下面的命令真的像预期的那样快:

git log --oneline -- \'**/somefile\'

然而,这个命令非常慢,尽管所有信息都应该在已经下载的树文件中:

git log --oneline --name-only -- \'**/somefile\'

检查后台活动,可见 git 获取更多对象。可以以某种方式避免这种情况吗?我需要在提交中获取文件的完整路径。

我能看到的唯一选择是自己做管道,例如使用 gitpython 之类的东西来运行原始树对象。但是,我宁愿使用纯 git 命令来归档任务(查找具有给定文件名/基本名称的所有提交)。

  • 可能是您触发了复制/重命名阈值检测,请尝试添加-C100% -M100%
  • 除了@jthill 的建议,值得注意的是部分克隆有很多边缘情况没有得到适当的收紧。这段代码可能会在未来一两年内发展(可能很多)。
  • @jthill 不幸的是,这不起作用似乎我必须解决。至少在没有--name-only 的情况下它运行得很快。

标签: git


【解决方案1】:

最快的方法是

git log --pretty=%H -- '**/somefile' | git diff-tree -r --stdin --name-only

然后根据需要填写主题行,说一个 awk 从边带提供它们git rev-list --oneline --no-abbrev @

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2022-06-29
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2019-12-30
    • 2011-02-23
    • 2021-05-19
    相关资源
    最近更新 更多