Zbieranie statystyk z Gita a różni choć ci sami autorzy

Czasem chcesz poznać statystyki kto ile rzeczy zrobił w Gicie.

Odpalasz zatem `git shortlog` bo wiesz (albo kolega wie), że to dobre do takich rzeczy. Ale! Psikus! Otóż stało się, że jedna i ta sama osoba ma więcej niż jeden adres mailowy a może i ksywkę. No i masz babo placek! Jak nie chcesz wtedy liczyć ręcznie… to czytaj dalej.

Potrzebujesz mapy. Mapy tych kilku różnych ksyw, maili, a może wrzut via GitHub do jednej i tej samej osoby. Potrzebujesz pliku .mailmap.

Załóżmy oto, że:

git log --pretty="%an %ae" | sort -u daje Ci:

 

ivyP 21340322+ivy@users.noreply.github.com
ivyP ivy.poison@gmail.com
ivy ivy.poison@gmail.com
riddle riddleThis@gmail.com
riddle enigma riddle_enigma@guess.me
Riddle Enigmã riddleThis@gmail.com
Riddle Enigma riddleThis@gmail.com
Dr Freeze dr_freeze@guess.me
Dr Freeze drFreeze@gmail.com
drFreeze drFreeze@gmail.com
riddleThis@gmail.com TheVillains
riddleThis riddleThis@gmail.com

Wtedy, wpisanie `git shortlog -sn` może dać Ci niestety coś suboptymalnego:

67 Riddle Enigmã
53 ivyP
48 ivy
29 Dr Freeze
23 riddleThis@gmail.com
17 Riddle Enigma
6 riddle
3 drFeeze
1 riddleThis

I bądź tu mądry i dodawaj ręcznie. Ale, skoro mamy być mądrzy, wróćmy do tej mapy z początku wpisu.

vim .mailmap # dodam, robimy to w głównym katalogu repo, tam, gdzie zwykle jest .gitignore czy .git

Co w tej mapie?

Mamy tu kilka problemów do rozwiązania. Chcemy mieć trzy linie, bo mamy trzy osoby. Nie chcemy bawić się z Unicode. Nie chcemy galimatiasu, chcemy klaru.

  1. Na każde kombo będziemy mieć jeden wpis.
  2. Idealnie mamy format: Ksywa <mail>
  3. Organizacje podciągamy pod <mail>
  4. Unikod omijamy, bo cholera wie jak jest traktowany. Opcja a: jeden znak (a z wężykiem), opcja b: dwa znaki (a ORAZ wężyk).

No to jazda:

Ivy ma trzy wpisy. Githubowy i dwa Gmailowe. To chytrze piszemy:

Ivy <21340322+ivy@users.noreply.github.com>

Ivy <ivy.poison@gmail.com>

Riddle ma MNÓSTWO wpisów. Poszalał (oszalał?). I tak będziemy “chytrzyć”:

Riddle <riddleThis@gmail.com> # większość wpisów ma na gmailu, zatem…

Riddle <TheVillains> # to organizacja, inaczej mielibyśmy riddleThis@gmail.com – skojarzony z nią mail – jako autora

Riddle <riddle_enigma@guess.me>

Zostaje doktorek:

Freeze <dr_freeze@guess.me>
Freeze <drFreeze@gmail.com>

Teraz, mając .mailmap postaci:

Ivy <21340322+ivy@users.noreply.github.com>
Ivy <ivy.poison@gmail.com>
Riddle <riddleThis@gmail.com>
Riddle <TheVillains> # organizacja by nie mieć jej maila jako autora
Riddle <riddle_enigma@guess.me>
Freeze <dr_freeze@guess.me>
Freeze <drFreeze@gmail.com>

Mamy to, o co szło! git shortlog -sn i

114 Riddle
101 Ivy
32 Freeze

Advertisements

2 Comments

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s