git repo에 대한 코드 줄 기록을 어떻게 그래프로 표시할 수 있나요?

StackOverflow https://stackoverflow.com/questions/23907

문제

기본적으로 각 커밋 후에 저장소의 코드 줄 수를 얻고 싶습니다.

내가 찾은 유일한 (정말 형편없는) 방법은 다음과 같습니다. 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
도움이 되었습니까?

해결책

당신은 또한 고려할 수 있습니다 gitstats, 이 그래프를 html 파일로 생성합니다.

다른 팁

다음과 같이 git log를 사용하여 줄을 추가하거나 제거할 수 있습니다.

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

여기에서 이 정보를 사용하여 수행한 것과 유사한 스크립트를 작성할 수 있습니다.파이썬에서:

#!/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에 대한 전체 코드 줄이 제공됩니다.

그게 도움이 되나요?귀하의 질문에 대해 제가 뭔가 오해를 한 것 같은 느낌이 듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top