문제

이전에는 주어진 SVN 저장소에 대한 간단한 커밋 통계를 생성하는 TortoiseSvn의 기능을 즐겼습니다.Git에서 무엇을 사용할 수 있는지 궁금하고 특히 다음 사항에 관심이 있습니다.

  • 사용자당 커밋 수
  • 사용자당 변경된 라인 수
  • 시간 경과에 따른 활동(예: 주간 변경 사항 집계)

어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

실제로 git에는 이에 대한 명령이 이미 있습니다.

git shortlog

귀하의 경우 다음 양식에 관심이 있는 것 같습니다.

git shortlog -sne

참조 --help 다양한 옵션을 위해.

당신은 또한에 관심이있을 수 있습니다 GitStats 프로젝트.그들은 다음을 포함하여 몇 가지 예를 가지고 있습니다. Git 프로젝트 통계.GitStat 메인 페이지에서:

현재 생성된 일부 통계 목록은 다음과 같습니다.

  • 일반 통계:총 파일, 줄, 커밋, 작성자.
  • 활동:시간별, 요일별, 주별 시간별, 연월별, 연월별, 연도별로 커밋합니다.
  • 저자:작성자 목록(이름, 커밋(%), 첫 번째 커밋 날짜, 마지막 커밋 날짜, 나이), 월 작성자, 연도 작성자.
  • 파일:날짜별 파일 개수, 확장자
  • 윤곽:날짜별 코드 라인

다른 팁

먼저, 당신은 그럴 필요가 없습니다 당기다 전체 저장소와 전체 이력이 현지에 있기 때문에 (네트워크 풀에서와 마찬가지로) 무엇이든. 통계를 줄 수있는 도구가 있다고 확신하지만 때로는 명령 줄로 창의력을 발휘할 수 있습니다. 예를 들어, 이것은 (내 머리에서만) 사용자 당 커밋 수를 제공합니다.

git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'

당신이 요청한 다른 통계에는 더 많은 생각이 필요할 수 있습니다. 사용 가능한 도구를보고 싶을 수도 있습니다. 인터넷 검색 git statistics 지적 GitStats Windows에서 실행하는 데 필요한 경험이없고 덜 아이디어가 있지만 시도 할 수 있습니다.

지금까지 내가 식별 한 최고의 도구는 Gitinspector입니다. 사용자 당 설정 보고서, 주당 주당 등

NPM과 같이 아래를 설치할 수 있습니다

npm install -g gitinspector

링크를 얻기위한 세부 사항은 다음과 같습니다

https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector

예제 명령이 있습니다

gitinspector -lmrTw
gitinspector --since=1-1-2017

이 질문에 답 해주신 Hacker에게 감사드립니다. 그러나이 수정 된 버전이 내 특정 사용에 더 좋다는 것을 알았습니다.

git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r

(Mac에 Gawk가 없어서 Awk를 사용하고 대부분의 활성 코미터를 상단에 정렬합니다.) SO와 같은 목록을 출력합니다.

 1205 therikss
 1026 lsteinth
  771 kmoes
  720 minielse
  507 pagerbak
  269 anjohans
  205 mfoldbje
  188 nstrandb
  133 pmoller
   58 jronn
   10 madjense
    3 nlindhol
    2 shartvig
    2 THERIKSS

특정 지점 또는 두 해시에 대한 통계를 얻는 방법은 다음과 같습니다.

키는 해시를 할 수있는 능력입니다

아래에서 나는 그 분기의 끝인 분기에서 머리까지의 첫 번째 해시를 사용하고 있습니다.

지점에 총 커밋을 표시하십시오

  • git log first_hash..head -pretty = oneline | WC -L
  • 출력 53

저자 당 총 커밋을 보여줍니다

  • git shortlog first_hash..head -sne
  • 산출
  • 24 저자 이름
  • 9 저자 이름

주목하십시오. REPO가 Github에있는 경우, 당신은 지금 (2013 년 5 월)에 흥미로운 통계를 얻기 위해 새로운 Github API 세트를 보유하고 있습니다.
보다 "이제 API에서 사용할 수있는 파일 CRUD 및 리포지토리 통계"

그것은 다음을 포함 할 것이다 :

나는 썼다 작은 쉘 스크립트 이는 병합 통계를 계산합니다 (피처 브랜치 기반 워크 플로를 처리 할 때 유용함). 작은 저장소의 예제 출력은 다음과 같습니다.

[$]> git merge-stats
% of Total Merges               Author  # of Merges  % of Commits
            57.14     Daniel Beardsley            4          5.63
            42.85        James Pearson            3         30.00

이 Gitstat 프로젝트를 참조하십시오

http://mirror.celinuxforum.org/gitstat/

다음은 저자, 라인을 추가하고 라인을 제거하고 git에서 카운트 카운트를 얻는 데 사용한 간단한 루비 스크립트입니다. 시간이 지남에 따라 커밋을 다루지 않습니다.

10,000 줄 이상을 추가/제거하는 커밋을 무시하는 트릭이 있습니다. 왜냐하면 이것이 일종의 코드 가져 오기라고 가정하기 때문입니다. 필요에 대한 논리를 자유롭게 수정하십시오. 아래를 gitstats-simple.rb라는 파일에 넣고 실행할 수 있습니다.

git log --numstat --pretty='%an' | ruby gitstats-simple.rb

gitstats-simple의 내용

#!/usr/bin/ruby

# takes the output of this on stdin: git log --numstat --prety='%an'

map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
  parts = line.split
  next if parts.size == 0
  if parts[0].match(/[a-z]+/)
    if who && memo[0] + memo[1] < 2000
      map[who][0] += memo[0]
      map[who][1] += memo[1]
      map[who][2] += 1
    end
    who = parts[0]
    memo = [0,0]
    next
  end
  if who
    memo[0]+=line[0].to_i
    memo[1]+=parts[1].to_i
  end
end

puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")

Datahero는 이제 Github 데이터를 쉽게 가져와 통계를 얻을 수 있습니다. 우리는 내부적으로 사용하여 각 이정표에서 진행 상황을 추적합니다.

https://datahero.com/partners/github/

내부적으로 사용하는 방법 : https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

공개 : 나는 Datahero를 위해 일합니다

gitlogged gem을 사용할 수 있습니다 (https://github.com/dexcodeinc/gitlogged) 저자와 날짜별로 활동을받습니다. 이것은 다음과 같은 보고서를 제공합니다.

gitlogged 2016-04-25 2016-04-26

다음 출력을 반환합니다

################################################################

Date: 2016-04-25

Yunan (4):
      fix attachment form for IE (#4407)
      fix (#4406)
      fix merge & indentation attachment form
      fix (#4394) unexpected after edit wo

gilang (1):
      #4404 fix orders cart


################################################################
################################################################

Date: 2016-04-26

Armin Primadi (2):
      Fix document approval logs controller
      Adding git tool to generate summary on what each devs are doing on a given day for reporting purpose

Budi (1):
      remove validation user for Invoice Processing feature

Yunan (3):
      fix attachment in edit mode (#4405) && (#4430)
      fix label attachment on IE (#4407)
      fix void method (#4427)

gilang (2):
      Fix show products list in discussion summary
      #4437 define CApproved_NR status id in order


################################################################

수정하다 https://stackoverflow.com/a/18797915/3243930. 출력은 Github의 그래프 데이터에 대해 많이 닫힙니다.

#!/usr/bin/ruby

# takes the output of this on stdin: git log --numstat --prety='%an'

map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
  parts = line.split("\t")
  next if parts.size == 0
  if parts[0].match(/[a-zA-Z]+|[^\u0000-\u007F]+/)
    if who
      map[who][0] += memo[0]
      map[who][1] += memo[1]
      if memo[0] > 0 || memo[1] > 0 
        map[who][2] += 1
      end
    end
    who = parts[0]
    memo = [0,0]
    next
  end
  if who
    memo[0]+=parts[0].to_i
    memo[1]+=parts[1].to_i
  end
end

puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top