Какие статистики Commit Commits легко вытащить
-
18-09-2019 - |
Вопрос
Раньше я наслаждался способностью Tortoisesvn генерировать простую статистику коммита для данного хранилища SVN. Интересно, что доступно в GIT, и мне особенно интересно:
- Количество коммитов на пользователя
- Количество линий изменено на пользователя
- активность с течением времени (например, агрегированные еженедельные изменения)
Любые идеи?
Решение
На самом деле, у GIT уже есть команда:
git shortlog
В вашем случае, похоже, вы заинтересованы в этой форме:
git shortlog -sne
Увидеть --help
Для различных вариантов.
Вы также можете быть заинтересованы в Gitstats Project. Анкет У них есть несколько примеров, включая статистика для проекта GIT. Анкет На главной странице Gitstat:
Вот список некоторых статистических данных, сгенерированных в настоящее время:
- Общая статистика: общие файлы, линии, коммиты, авторы.
- Активность: Коммитами по часу дня, день недели, час недели, месяца года, года и месяца и год.
- Авторы: Список авторов (имя, Commits (%), первая дата фиксации, дата последней фиксации, возраст), автор месяца, автор года.
- Файлы: количество файлов по дате, расширения
- Строки: строки кода по дате
Другие советы
Во -первых, вам не нужно тянуть что угодно (как в сетевом притяжении), потому что у вас есть весь репозиторий и всю историю на локальном уровне. Я почти уверен, что есть инструменты, которые дадут вам статистику, но иногда вы можете просто творчесть с помощью командных строк. Например, это (прямо из моей головы) даст вам количество коммитов на пользователя:
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
так далее
Спасибо Хаккеру за ответ на этот вопрос. Тем не менее, я обнаружил, что эти модифицированные версии лучше для моего конкретного использования:
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, и сортировать с большинством активных комиттов сверху.) Он выводит список, как 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 Имя автора
Обратите внимание, что, Если ваш репо находится на GitHub, Теперь у вас есть новый набор GitHub API, чтобы получить интересную статистику.
Видеть "Файл CRUD и статистика репозитория теперь доступна в API"
Это будет включать в себя:
Я написал небольшой сценарий оболочки Это рассчитывает статистику слияния (полезно при работе с рабочим процессом на основе функций). Вот пример вывода в небольшом репозитории:
[$]> 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
Вот простой сценарий рубины, который я использовал для получения автора, добавленных линий, удаленных линий и подсчетов от 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")
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")