Визуализиране на топологията на клоновете в git

Играя си с git изолирано на собствената си машина и ми е трудно да поддържам мисловен модел на всички мои клонове и предавания. Знам, че мога да направя git log, за да видя историята на предаванията от мястото, където се намирам, но има ли начин да видя цялата топография на клона, нещо подобно на тези асизи карти, които изглежда се използват навсякъде за обяснение на клоновете?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

Просто ми се струва, че някой, който идва и се опитва да подбере моето хранилище, ще има трудности да разбере какво точно се случва.

Предполагам, че съм повлиян от AccuRev's stream browser...

Решение

git log --graph или gitk. (И двата варианта приемат и --all, което ще покаже всички клонове, а не само текущия.)

Редактиране: За имена на клонове и компактен изглед опитайте: git log --graph --decorate --oneline

Коментари (7)

Обикновено използвам

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

С цветове (ако шелът ви е Bash):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

Това ще отпечата текстово представяне по следния начин:

* 040cc7c       (HEAD, master) Mannual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work succesfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(Бихте могли просто да използвате git log --format=oneline, но това ще обвърже съобщенията за извършените промени с числа, което не изглежда толкова красиво).

За да направите пряк път за тази команда, може да редактирате вашия файл ~/.gitconfig:

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

Въпреки това, както Sodel the Vociferous отбелязва в коментарите, такава дълга команда за форматиране е трудна за запомняне. Обикновено това'не е проблем, тъй като можете да я поставите във файла ~/.gitconfig. Въпреки това, ако понякога ви се налага да влизате в отдалечена машина, където не можете да променяте файла с конфигурацията, можете да използвате по-проста, но по-бърза за въвеждане версия:

git log --graph --oneline
Коментари (5)

Харесва ми с git log да правя:

 git log --graph --oneline --branches

(също и с --all, за преглед и на отдалечени клонове)

Работи с последните версии на Git: въведена от 1.6.3 (Thu, 7 May 2009)

  • "--pretty=" опцията на фамилията команди log вече може да се изписва като "--format=".
    Освен това --format=%formatstring е съкращение на --pretty=tformat:%formatstring.
  • "--oneline" е синоним на "--pretty=oneline --abbrev-commit".
PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Можете също така да ограничите обхвата на показване на дневника (брой на предаванията):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(показва само последните 5 предавания)


Това, което не ми харесва в сегашното избрано решение, е:

 git log --graph

Показва твърде много информация (когато искам да разгледам само кратко резюме):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC 
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC 
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk е чудесен, но ме принуждава да напускам сесията на шела, за да отида в друг прозорец, докато бързото показване на последните n предавания често е достатъчно.

Коментари (2)