Ak ste používateľom verziovacieho systému Git a pre interakciu používate terminál, potom určite oceníte vizuálne zobrazenie vetiev bez dodatočnej inštalácie programov na to určených (ako napr. gitk). V tomto článku sa pozrieme na to, ako vykresliť históriu s údajmi podľa vašich želaní pomocou vstavaných príkazov v systéme Git.
Ako používateľ terminálu, určite poznáte príkaz na zobrazenie histórie
repozitára git log
, ktorý pre zmeny v histórii vygeneruje zoznam podobný tomuto:
$ git log
commit 27dbfda18e44dcb9315b786e36d13dd807fc8e53
Merge: 8141d17 efa74c5
Author: Nicolas Tester <nicolas.tester@example.com>
Date: Tue Mar 14 08:58:07 2017 +0100
Merge branch '3.2'
* 3.2:
[FrameworkBundle] Fix cleaning of test dirs
commit efa74c5eab2e285d81928790bc2e48078861ca39
Merge: 5676526 6b4cfd6
Author: Nicolas Tester <nicolas.tester@example.com>
Date: Tue Mar 14 08:56:22 2017 +0100
Merge branch '2.8' into 3.2
* 2.8:
[FrameworkBundle] Fix cleaning of test dirs
...
Zoznam commit-ov obsahuje detaily, ktoré nás obyčajne nezaujímajú. Čo asi väčšinu vývojárov zaujíma je predmet commit-u, autor commit-u, názov vetvy a prípadne dátum.
Výstup z predchádzajúceho príkazu git log
môžeme zjednodušiť pomocou prepínača
--pretty=oneline
, prípadne jeho modifikovanou skrátenou verziou --oneline
.
Prepínač --pretty
podporuje okrem hodnoty oneline
aj iné formáty, a taktiež
umožňuje použitie vlastných formátov. V prípade použitia hodnoty oneline
bude
výstup vyzerať nasledovne:
$ git log --oneline
27dbfda Merge branch '3.2'
efa74c5 Merge branch '2.8' into 3.2
6b4cfd6 Merge branch '2.7' into 2.8
ac89b1c minor #21972 [FrameworkBundle] Fix cleaning of test dirs
...
Zoznam commit-ov je zjednodušený a usporiadaný chronologicky. Čo však z výstupu
stále nie je zrejmé, je umiestnenie commit-u vo vetve. Pre vykreslenie textovej
grafickej reprezentácie histórie commit-ov môžeme spolu s --oneline
použiť
prepínač --graph
. Výstup bude následne vyzerať podobne:
$ git log --oneline --graph
* 27dbfda Merge branch '3.2'
|\
| * efa74c5 Merge branch '2.8' into 3.2
| |\
| | * 6b4cfd6 Merge branch '2.7' into 2.8
| | |\
| | | * ac89b1c minor #21972 [FrameworkBundle] Fix cleaning of test dirs
| | | |\
| | | | * 4842c86 [FrameworkBundle] Fix cleaning of test dirs
* | | | | 8141d17 bug #21983 [HttpKernel] Resolve real class when failing on proxies
|\ \ \ \ \
| * | | | | e34e29a [HttpKernel] Resolve real class when failing on proxies
* | | | | | f2ae2ed bug #21986 Stop relying on the $mode argument
|\ \ \ \ \ \
...
Všimnite si, že predchádzajúci výstup neobsahuje informácie ako názov vetvy,
dátum, či meno autora. Ak tieto informácie chceme mať vo svojom výstupe, potom
budeme musieť upraviť hodnotu prepínača --pretty
. Táto hodnota môže
pozostávať z prednastavených zástupných znakov a vlastných znakov. Viac informácií
o formátoch a zástupných znakoch môžete nájsť v dokumentácií príkazu
git-log.
Hodnota pre formátovaný výstup môže vyzerať napríklad takto:
format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
Pre lepšie porozumenie si teraz rozoberme jednotlivé parametre v reťazci.
V prvej časti môžeme vidieť %Cred%h%Creset
. Zástupné znaky %Cred
a %Creset
špecifikujú farbu pre zástupný znak %h
, ktorý je skrátenou verziou
kryptografického súčtu. V ďalšej časti %Cyellow%d%Creset
, zástupné znaky
%Cyellow
a %Creset
opäť špecifikujú farbu pre %d
, čo je zástupný znak
pre meno referencie. Nasleduje %s
, čo je zástupný znak pre predmet commit-u.
%Cgreen(%cr)
nám určuje farbu dátumu commit-u %cr
, a na koniec
%C(bold blue)<%an>%Creset
určuje farbu pre meno autora zmeny %an
.
Výstup pre formát definovaný vyššie bude vyzerať nasledovne:
Toto je zápis úplného príkazu s formátovaným výstupom:
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
Pre zjednodušenie použitia príkazu môžete v globálnom súbore pre konfiguráciu
~/.gitconfig
pomocou príkazu git config
vytvoriť alias:
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
Po otvorení súboru by ste vytvorený alias následne mali vidieť:
$ cat ~/.gitconfig
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
...
Vytvorený alias môžete nakoniec použiť kdekoľvek pomocou príkazu git lg
.
Ako vidíte informácie vo vizuálnom zobrazené môžete nakonfigurovať podľa vašich požiadaviek. Pre ďalšiu inšpiráciu si môžete prečítať niektoré z odpovedí na Stack Overflow:
Bližšie informácie o konfigurácii a úplný zoznam konfiguračných parametrov nájdete na stránke dokumentácie príkazu git-log.