基本上我想在每次提交后获取存储库中的代码行数.
我发现的唯一(非常糟糕)方法是使用git filter-branch
运行,然后运行每个提交wc -l *
的脚本git reset --hard
wc -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文件.
您也可以考虑使用gitstats,它将此图生成为html文件.
您可以使用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))
http://github.com/ITikhonov/git-loc为我开箱即用.
跳到脑海的第一件事是你的git历史可能具有非线性历史.您可能难以确定合理的提交序列.
话虽如此,您似乎可以在该提交中保留提交ID和相应代码行的日志.在后提交钩子中,从HEAD修订版开始,向后工作(如果需要,分支到多个父级),直到所有路径都达到您之前已经看到的提交.这应该为您提供每个提交ID的总代码行数.
这对你有帮助吗?我有一种感觉,我误解了你的问题.