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

我发现的唯一(非常糟糕)的方法是使用git filter-branch来运行wc -l * ,以及在每次提交时运行git reset --hard的脚本,然后运行wc -l

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

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

我玩过.lines() '库,但我发现最接近的是在diff上使用.lines()方法,这似乎应该给出添加的行(但不会:删除时返回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

===============>>#1 票数:26 已采纳

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

===============>>#2 票数:23

您可以使用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))

===============>>#3 票数:11

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

===============>>#4 票数:5

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

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

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

  ask by dbr translate from so

未解决问题?本站智能推荐:

2回复

使用Git合并选择性代码行?

我想强制git 始终使用(种类)3路冲突解决方案进行合并。 而且,我想做到能够选择单行。 目前我正在合并两个分支机构。 但是,如果可能的话,即使合并多个分支,我也想知道如何执行此任务。
1回复

计算git存储库中每个作者的代码行数

因此,我与其他一些程序员组成了团队,需要在git存储库中获取每个作者的代码行数。 这不仅意味着作者修改了行,还包括空白行和注释行。 理想情况下,我将能够创建一个仅包含特定作者的提交的新分支(对我来说是--author="BtheDestroyer" ),然后使用cloc分别获取注释行数和代码
2回复

不假装我实际写了多少行的“ git push”

好吧,情况是我需要知道到目前为止我是如何编写LoC(代码行)的。 这很容易,因为GitHub.com具有“统计信息和图形”-“影响”部分,所有内容都清晰可见。 问题是我需要添加jQuery。 您可能会注意到,我不是jQuery的作者。 (: 如果我git add jQuery
2回复

您将如何测量插入/更改/删除的代码行(LoC)?

我的问题涉及LoC指标。 我必须提供插入,更改和删除行的统计信息。 我的用户使用ClearCase和基于它的下面的示例,但我相信我的问题是一般性的。 请查看以下示例(摘自ClearCase文档)。 它比较两个文件版本, /main/1 (在左侧)和/main/3 (右侧)。
2回复

在src文件夹中获取代码行,跳过注释和空行

嗨,我已经有一些东西可以获取代码行,但是仍然可以计算出空行和注释。 您可以修改它以跳过注释和空白行吗? 提前致谢
1回复

Git / GitHub为帐户贡献的总行数

我想获得GitHub帐户的代码行总数。 这不是为了判断生产力或其他任何东西(LOC是一个糟糕的选择),它真的只是为了我们的娱乐。 是否有可能获得GitHub上的帐户(通过电子邮件地址或句柄)完成的代码行总数?
1回复

如何计算PHP项目中的代码行数?

我想计算给定git存储库中PHP项目的代码行数。 目前,我正在使用: 计算所有php文件中的代码行数。 在计数所有行之前最好有一个步骤,它会跳过所有空行,也可能跳过包含注释的行(在PHP中,这在#和//为单行注释,在/* */为多行注释)。 我猜sed可能有帮助,但是如何处理多
2回复

python类中的代码行?

我正在尝试查找存储在python文件中的类或函数内的代码行数,我的代码是这样的...我想要的是在一个类中查找代码行数,而不是所有文件...有什么好办法吗?
4回复

如何计算Python中除了注释和文档字符串之外的代码行? [关闭]

我想尽可能准确地计算多文件Python项目中的代码行,但不要在总计中包含注释,文档字符串或空行。 我首先尝试使用cloc,它可以作为Debian软件包使用。 但是cloc将大多数文档字符串视为代码 - 即使它们是注释。 ( 更新:不再 - 最近版本的cloc现在将Python文档字符串
5回复

使用Python计算目录中的代码行

我有一个项目,我想要计算其代码行。 是否可以使用Python计算包含项目的文件目录中的所有代码行?