随着时间的推移查看存储库大小
Viewing repository size over time
有没有办法获取给定修订版的存储库大小?我想创建一个图表来显示大小随时间的变化。
这是一个棘手的问题。
第一:什么是'size'?它是以字节为单位的大小吗?还是代码行数?
如果答案是'bytes',那么除了检查每个修订、清除工作目录并检查工作目录的大小之外别无他法。
如果答案是 'lines of code' 并且存储库只包含文本文件,那么您可以使用 hg log --stat
(另请参阅 How Can I calculate the sum of a specific column using bash?)来检查每个修订版:
LC_ALL=C hg log -r0:tip --stat | grep 'insertions' | awk '{sum+= ; min+=; print ,} END {print "sum=",sum-min}'
这是用 hg 3.4.2 测试的,但我不知道 hg log --stat
的输出有任何重大变化
受到 planemaker 回答的启发,我写了这个命令:
hg log -r0:tip --stat --template 'date: {date|shortdate}\n' \
| awk \
'/^date:/ { date = }
/^ *[0-9]+ files changed/ { sum += - ; print date, sum }' \
| awk \
' != prevDate { if (prevLine != "") { print prevLine } }
{ prevLine = [=10=]; prevDate = }
END { print prevLine }'
第二个 awk 命令过滤掉同一日期的多个提交,以便仅显示给定日期的最后一次提交。
示例输出:
2014-09-22 304
2014-10-25 308
2014-12-25 320
2014-12-27 253
2015-03-17 252
2015-04-28 230
2015-05-22 241
2015-08-12 301
2015-07-13 302
2015-08-12 306
2015-08-19 更新:考虑没有文件更改的提交(有时发生合并)。
有没有办法获取给定修订版的存储库大小?我想创建一个图表来显示大小随时间的变化。
这是一个棘手的问题。
第一:什么是'size'?它是以字节为单位的大小吗?还是代码行数?
如果答案是'bytes',那么除了检查每个修订、清除工作目录并检查工作目录的大小之外别无他法。
如果答案是 'lines of code' 并且存储库只包含文本文件,那么您可以使用 hg log --stat
(另请参阅 How Can I calculate the sum of a specific column using bash?)来检查每个修订版:
LC_ALL=C hg log -r0:tip --stat | grep 'insertions' | awk '{sum+= ; min+=; print ,} END {print "sum=",sum-min}'
这是用 hg 3.4.2 测试的,但我不知道 hg log --stat
受到 planemaker 回答的启发,我写了这个命令:
hg log -r0:tip --stat --template 'date: {date|shortdate}\n' \
| awk \
'/^date:/ { date = }
/^ *[0-9]+ files changed/ { sum += - ; print date, sum }' \
| awk \
' != prevDate { if (prevLine != "") { print prevLine } }
{ prevLine = [=10=]; prevDate = }
END { print prevLine }'
第二个 awk 命令过滤掉同一日期的多个提交,以便仅显示给定日期的最后一次提交。
示例输出:
2014-09-22 304
2014-10-25 308
2014-12-25 320
2014-12-27 253
2015-03-17 252
2015-04-28 230
2015-05-22 241
2015-08-12 301
2015-07-13 302
2015-08-12 306
2015-08-19 更新:考虑没有文件更改的提交(有时发生合并)。