Какую статистику Git commit легко вытащить
Раньше я наслаждался способностью TortoiseSvn генерировать простую статистику фиксации для данного репозитория SVN. Интересно, что доступно в Git и меня особенно интересует:
- Количество коммитов на пользователя
- Количество строк, измененных на пользователя
- активность со временем (например, агрегированные еженедельные изменения)
Любые идеи?
Ответы
Ответ 1
Собственно, git уже имеет команду для этого:
git shortlog
в вашем случае, похоже, что вас интересует эта форма:
git shortlog -sne
См. --help
для различных параметров.
Вы также можете быть заинтересованы в проекте GitStats. У них есть несколько примеров, в том числе статистика для проекта git. На главной странице GitStat:
Вот список статистических данных, созданных в настоящее время:
- Общая статистика: общие файлы, строки, коммиты, авторы.
- Деятельность: фиксируется по часам дня, дня недели, часа недели, месяца года, года и месяца и года.
- Авторы: список авторов (имя, коммит (%), первая дата фиксации, последняя дата фиксации, возраст), автор месяца, автор года.
- Файлы: количество файлов по дате, расширения
- Линии: Линии кода по дате
Ответ 2
Во-первых, вам не нужно ничего тянуть (как в сетевом движении), потому что у вас есть весь репозиторий и вся история локально. Я уверен, что есть инструменты, которые дадут вам статистику, но иногда вы можете просто быть творческими с командами. Например, это (только из моей головы) даст вам количество коммитов для каждого пользователя:
git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'
Другие статистические данные, о которых вы просили, могут потребовать больше мысли. Возможно, вы захотите увидеть доступные инструменты. Googling для git statistics
указывает на инструмент GitStats
, который у меня нет опыта и даже меньше представления о том, что нужно для его запуска на окнах, но вы можете попробовать.
Ответ 3
Спасибо хакеру за ответ на этот вопрос. Тем не менее, я нашел, что эти измененные версии лучше для моего конкретного использования:
git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r
(используя awk, поскольку у меня нет gawk на моем mac, и сортировка с самым активным коммиттером сверху).
Он выводит такой список:
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
Ответ 4
Лучшим инструментом, который я идентифицировал, является 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
и т.д.
Ответ 5
Вот способы получить статистику для конкретной ветки или двух хэшей.
ключ здесь - возможность делать HASH..HASH
Ниже я использую первый хэш от ветки к HEAD, который является концом этой ветки.
Показать итоговые суммы в ветке
- git журнал FIRST_HASH..HEAD --pretty = oneline | wc -l
- Выход 53
Показать общие коммиты на автора
- git shortlog FIRST_HASH..HEAD -sne
- Выход
- 24 Имя автора
- 9 Имя автора
Ответ 6
Обратите внимание, что , если ваше репо находится на GitHub, теперь (май 2013 г.) есть новый набор API GitHub для получения интересной статистики.
См. " Файл CRUD и статистика хранилища теперь доступны в API"
Это будет включать:
Ответ 7
Я написал небольшую оболочку script, которая вычисляет статистику слияния (полезно при работе с рабочим процессом на основе ветки на основе объекта). Вот пример вывода в небольшом репозитории:
[$]> 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
Ответ 8
Вот простой ruby script, который я использовал для получения автора, добавленных строк, удаленных строк и фиксации count из git. Он не покрывает фиксации с течением времени.
Обратите внимание, что у меня есть трюк, когда он игнорирует фиксацию, которая добавляет/удаляет более 10 000 строк, потому что я предполагаю, что это импорт какого-либо кода, не стесняйтесь модифицировать логику для ваших нужд. Вы можете поместить ниже в файл с именем gitstats-simple.rb, а затем запустите
git log --numstat --pretty='%an' | ruby gitstats-simple.rb
содержимое gitstats-simple.rb
#!/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")
Ответ 9
Смотрите этот проект gitstat
http://mirror.celinuxforum.org/gitstat/
Ответ 10
DataHero теперь позволяет легко извлекать данные Github и получать статистику.
Мы используем его внутренне, чтобы отслеживать прогресс на каждом этапе.
https://datahero.com/partners/github/
Как мы используем его внутренне: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/
Раскрытие: я работаю для DataHero
Ответ 11
Вы можете использовать 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
################################################################
Ответ 12
Изменить fooobar.com/info/74044/...
, вывод значительно закрыт для данных графика 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")