当前位置:  开发笔记 > 编程语言 > 正文

如何绘制git repo的代码行历史?

如何解决《如何绘制gitrepo的代码行历史?》经验,为你挑选了4个好方法。

基本上我想在每次提交后获取存储库中的代码行数.

我发现的唯一(非常糟糕)方法是使用git filter-branch运行,然后运行每个提交wc -l *的脚本git reset --hardwc -l

为了使它更清楚一点,当工具运行时,它将输出第一次提交的代码行,然后输出第二次提交的代码行,依此类推.这就是我希望工具输出的内容(作为示例):

me@something:~/$ gitsloc --branch master
10
48
153
450
1734
1542

我玩过ruby'git'库,但是我发现最接近的是.lines()在diff上使用该方法,这似乎应该给出添加的行(但不是:例如当你删除行时它会返回0)

require 'rubygems'
require 'git'

total = 0
g = Git.open(working_dir = '/Users/dbr/Desktop/code_projects/tvdb_api')    

last = nil
g.log.each do |cur|
  diff = g.diff(last, cur)
  total = total + diff.lines
  puts total
  last = cur
end

cboettig.. 28

您也可以考虑使用gitstats,它将此图生成为html文件.



1> cboettig..:

您也可以考虑使用gitstats,它将此图生成为html文件.


(@omouse - 它还按日期数据文件发出一行,你可以在你选择的应用程序中绘图)

2> fserb..:

您可以使用git log获取添加和删除的行,例如:

git log --shortstat --reverse --pretty=oneline

从这里,您可以编写与使用此信息执行的脚本类似的脚本.在python中:

#!/usr/bin/python

"""
Display the per-commit size of the current git branch.
"""

import subprocess
import re
import sys

def main(argv):
  git = subprocess.Popen(["git", "log", "--shortstat", "--reverse",
                        "--pretty=oneline"], stdout=subprocess.PIPE)
  out, err = git.communicate()
  total_files, total_insertions, total_deletions = 0, 0, 0
  for line in out.split('\n'):
    if not line: continue
    if line[0] != ' ': 
      # This is a description line
      hash, desc = line.split(" ", 1)
    else:
      # This is a stat line
      data = re.findall(
        ' (\d+) files changed, (\d+) insertions\(\+\), (\d+) deletions\(-\)', 
        line)
      files, insertions, deletions = ( int(x) for x in data[0] )
      total_files += files
      total_insertions += insertions
      total_deletions += deletions
      print "%s: %d files, %d lines" % (hash, total_files,
                                        total_insertions - total_deletions)


if __name__ == '__main__':
  sys.exit(main(sys.argv))


这个答案中的正则表达式似乎不再起作用.git日志消息有时不包括删除或插入.

3> ma11hew28..:

http://github.com/ITikhonov/git-loc为我开箱即用.



4> Greg Hewgill..:

跳到脑海的第一件事是你的git历史可能具有非线性历史.您可能难以确定合理的提交序列.

话虽如此,您似乎可以在该提交中保留提交ID和相应代码行的日志.在后提交钩子中,从HEAD修订版开始,向后工作(如果需要,分支到多个父级),直到所有路径都达到您之前已经看到的提交.这应该为您提供每个提交ID的总代码行数.

这对你有帮助吗?我有一种感觉,我误解了你的问题.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有