git - 如何提高git log的性能?

标签 git git-log

我正在尝试从这样的几个存储库中提取git日志:

git log --pretty=format:%H\t%ae\t%an\t%at\t%s --numstat

对于较大的存储库(如rails/rails),需要花费35秒钟以上的时间才能生成日志。

有没有办法改善这种性能?

最佳答案

没错,在56,000次提交上生成报告需要花费20到35秒,这产生了224,000行(15MiB)的输出。我实际上认为这是相当不错的表现,但您却没有;好的。

由于您是从不变的数据库中使用恒定格式生成报告,因此只需执行一次。之后,您可以使用git log的缓存结果并跳过耗时的生成。例如:

git log --pretty=format:%H\t%ae\t%an\t%at\t%s --numstat > log-pretty.txt

您可能想知道在整个报告中搜索感兴趣的数据需要花费多长时间。这是一个值得提出的问题:
$ tail -1 log-pretty.txt
30  0   railties/test/webrick_dispatcher_test.rb
$ time grep railties/test/webrick_dispatcher_test.rb log-pretty.txt 
…
30  0   railties/test/webrick_dispatcher_test.rb

real    0m0.012s
…

不错,引入“缓存”已将所需时间从35秒以上减少到十几毫秒。快了将近3000倍。

关于git - 如何提高git log的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186829/

相关文章:

git - 如何在 Mac OSX 上获取分支名称的 Git 补全?

git - 使用 Git,如何记录两个特定分支之间 merge 提交的所有提交?

git - 将文件和目录连同提交历史一起移动到子目录中

git - 我自己的 github 上的远程 : Repository not found.

git-过滤器分支 : leave directory structure unchanged

Git reset --hard 并推送到远程仓库

git - 无法解决 rebase 冲突

Git 日志 : excluding commits from a specific merge

git - 什么管道命令提供与 git log --follow 相同的功能?

裸仓库上的 git diff