Git存储库的大小与时间的关系

时间:2013-12-25 22:19:18

标签: git

我想生成一个总存储库大小与时间(或提交)的图表或表。

是否有git命令或工具可以执行此操作?我尝试过git log但似乎没有选项可以导出提交的大小。

4 个答案:

答案 0 :(得分:7)

提交的 size 非常难以定义。首先,大多数提交都会回收许多现有的Git对象。如果您不在修订版A和B之间更改文件,B的大小是否应包含该文件的大小?此外,存储库大小本身也不容易确定。由于Git的压缩系统,它会不时地重新包装物体。它的方式可以受到多种因素的影响,因此如果再次执行此操作,它可能不会采用相同的方式,从而导致总大小不同。

您可以做的是检查每个修订版本的签出树的大小。但是,当然,您将获得的结果将远离存储库的大小本身。

答案 1 :(得分:3)

Git尚未提供此类功能。

最好的解决方案是对日志进行审核,然后将文件大小并添加到一起。

BitBucket(Daniel Rohan)的制造商之一在PERL中写了一篇专辑:

https://confluence.atlassian.com/plugins/servlet/mobile#content/view/292651328

答案 2 :(得分:3)

您可以直观地显示“代码频率”,而不是尝试衡量“尺寸”(使用Git仓库,as explained poke无效)。即随着时间的推移增加或删除的线条的贡献“大小”:
这个想法来自“Introducing the New GitHub Graphs

https://github-images.s3.amazonaws.com/blog/2012/graphs.code-frequency.png

请参阅“Stupid Git Trick - getting contributor stats”,但您不一定会将--authorgit log --mumstat一起使用,但可以将git log--since和{{--until结合使用1}}选项。

类似的东西:

git log --since "OCT 4 2011" --until "OCT 11 2011" --pretty=tformat: --numstat | \
  gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END \
  { printf "added lines: %s removed lines: %s total lines: %s\n",add,subs,loc }' -

答案 3 :(得分:2)

除了提出“存储库大小甚至意味着什么?”的明智答案之外,您还必须考虑对您来说意味着什么时间。作者提交日期?提交日期?当提交实际上可以通过特定分支到达时?与其他版本控制系统相反,时间在Git上下文中通常不太有用。

  • 通常显示的提交日期,例如git log输出通常是第一次创建提交的时间点。在离开开发者的机器之前,提交者可以烘烤数天,数周甚至数月。
  • 提交日期表示创建特定提交对象的时间,因此提交例如如果作者日期保持不变,使用git format-patch进行重新定义或应用于上游分支将获得新的提交日期。但是,由于工作在不同的分支机构进行,提交日期可能会持续数月。
  • 最后,Git不记录特定提交可达的时间(这是与其他版本控制系统记录的提交/签入/提交时间戳最接近的时间。您可能需要监视git通过例如运行钩子来记录这些信息的内容。