Симпатичные графы веток - PullRequest
1193 голосов
/ 29 июня 2009

Я видел, что в некоторых книгах и статьях есть действительно симпатичные графики веток и коммитов git. Как я могу сделать высококачественные печатные изображения из истории git?

Ответы [ 31 ]

42 голосов
/ 25 января 2016

Я написал веб-инструмент для преобразования журналов git в красивые графики SVG: Bit-Booster - инструмент для рисования графика автономной фиксации

Загрузите вывод из git log --pretty='%h|%p|%d' непосредственно в инструмент, а затем нажмите ссылку "download graph.svg".

Инструмент является чисто клиентским, и поэтому никакие ваши данные Git не передаются на мой сервер. Вы также можете сохранить HTML + JS локально и запустить его, используя URL-адреса "file: ///". Проверено на Chrome 48 и Firefox 43 на Ubuntu 12.04.

Он генерирует HTML, который может быть размещен непосредственно на любой странице (включая движок блогов blogspot!). Посмотрите на некоторые сообщения в блоге здесь:

http://bit -booster.blogspot.ca /

Вот скриншот примера HTML-файла, сгенерированного инструментом:

http://bit -booster.com / graph.html (инструмент)

36 голосов
/ 29 июня 2009

Зависит от того, как они выглядели. Я использую gitx , который делает изображения, подобные этой:

simple plot

Вы можете сравнить git log --graph с gitk при слиянии осьминога в 24 направлениях (изначально http://clojure -log.n01se.net / date / 2008-12-24.html ):

imagehttp://lwn.net/images/ns/kernel/gitk-octopus.png">

34 голосов
/ 18 марта 2014

Я добавил три пользовательских команды: git tree, git stree и git vtree. Я пойду по ним в таком порядке.

[alias]
    tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n         %C(black)[%cr]%C(reset)  %x09%C(black)%an: %s %C(reset)'

enter image description here

С git stree и git vtree Я использую bash, чтобы помочь с форматированием.

[alias]
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(black): %s%C(reset)'
    stree = !bash -c '"                                                                             \
        while IFS=+ read -r hash time branch message; do                                            \
            timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\");     \
            timelength=$(echo \"16+${#time}-${#timelength}\" | bc);                                 \
            printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\";          \
        done < <(git logx && echo);"'

git_stree


[alias]
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(black): %s%C(reset)'
    vtree = !bash -c '"                                                                             \
        while IFS=+ read -r hash time branch message; do                                            \
            timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\");     \
            timelength=$(echo \"16+${#time}-${#timelength}\" | bc);                                 \
            printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\";  \
        done < <(git logx && echo);"'

git_vtree


РЕДАКТИРОВАТЬ: Это работает с Git версии 1.9a. Значение цвета 'auto', по-видимому, дебютирует в этом выпуске. Это хорошее дополнение, потому что названия ветвей получат другой цвет. Это облегчает различие между локальной и удаленной ветвями, например.

31 голосов
/ 02 июня 2011

Для более подробного текстового вывода, пожалуйста, попробуйте:

git log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=short

Вы можете написать псевдоним в $ HOME / .gitconfig

[alias]
    graph = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short
27 голосов
/ 03 апреля 2011

gitg : средство просмотра репозитория на основе gtk, это новое, но интересное и полезное
http://git.gnome.org/browse/gitg
Я использую это в настоящее время

27 голосов
/ 01 сентября 2017

Это мое мнение по этому вопросу:

Скриншот:

Screenshot

Использование:

git hist - Показать историю текущей ветки

git hist --all - Показать график всех ветвей (включая удаленные)

git hist master devel - Показать отношения между двумя или более ветвями

git hist --branches - Показать все местные филиалы

Добавить --topo-order для сортировки коммитов топологически, а не по дате (по умолчанию в этом псевдониме)

Преимущества:

  • выглядит как обычный --decorate, поэтому с разными цветами для разных названий ветвей
  • Добавляет адрес электронной почты коммиттера
  • Добавляет относительную и абсолютную дату фиксации
  • Сортировка фиксируется по дате

Установка:

git config --global alias.hist "log --graph --date-order --date=short \
--pretty=format:'%C(auto)%h%d %C(reset)%s %C(bold blue)%ce %C(reset)%C(green)%cr (%cd)'"
25 голосов
/ 05 апреля 2014

Хотя иногда я использую gitg , всегда возвращаюсь к командной строке:

[alias]
    #quick look at all repo
    loggsa = log --color --date-order --graph --oneline --decorate --simplify-by-decoration --all
    #quick look at active branch (or refs pointed)
    loggs  = log --color --date-order --graph --oneline --decorate --simplify-by-decoration
    #extend look at all repo
    logga  = log --color --date-order --graph --oneline --decorate --all
    #extend look at active branch
    logg   = log --color --date-order --graph --oneline --decorate
    #Look with date
    logda  = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\" --all
    logd   = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\"        
    #Look with relative date
    logdra = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\" --all
    logdr = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\"  

    loga   = log --graph --color --decorate --all

    # For repos without subject body commits (vim repo, git-svn clones)
    logt  = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\"
    logta  = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all        
    logtsa = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all --simplify-by-decoration 

Как вы можете видеть, это почти псевдонимы для сохранения нажатия клавиш, основанные на:

  • - цвет: чистый вид
  • - график: визуализировать родителей
  • - порядок-дата: наиболее понятный взгляд на репо
  • - украсить: кто есть кто
  • - oneline: много раз все, что вам нужно знать о коммите
  • - упрощение по оформлению: базовый для первого взгляда (только теги, соответствующие слияния, ветви)
  • - все: сохранение нажатий клавиш со всеми псевдонимами с и без этой опции
  • - date = относительный (% ar): понять активность в репо (иногда ветка - это несколько коммитов рядом с мастером, но месяцы назад от него)

Смотрите в последней версии git (1.8.5 и выше) вы можете воспользоваться% C (авто) в заполнителе декорации% d

Отсюда все, что вам нужно, это хорошее понимание gitrevisions для фильтрации всего, что вам нужно (что-то вроде master..develop, где --simplify-merges может помочь с долгосрочными ветвями)

Мощь командной строки - это быстрое конфигурирование, основанное на ваших потребностях (понимайте, что репозиторий не является уникальной конфигурацией журнала ключей, поэтому иногда необходимо добавить --numstat, или --raw, или --name-status. Здесь git log и псевдонимы быстрые, мощные и (со временем) самый красивый график, который вы можете достичь. Более того, с выводом по умолчанию через пейджер (скажем, меньше) вы всегда можете быстро искать в результатах. Не уверен? Вы всегда можете проанализировать результат с такими проектами, как gitgraph

17 голосов
/ 17 января 2013

Очень незначительная подстройка Потрясающий ответ Слиппа , вы можете использовать его псевдонимы для регистрации только одной ветви:

[alias]
lgBranch1 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
lgBranch2 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(bold white)— %an%C(reset)' --abbrev-commit
lg = !"git lg1"

Отбросив --all, теперь вы можете сделать

git lgBranch1 <branch name>

или даже

git lgBranch1 --all
14 голосов
/ 05 октября 2016

У меня есть git log псевдоним ~/.gitconfig для просмотра истории графика:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

При этом git l выведет что-то вроде:

enter image description here

В Git 2.12 + вы даже можете настроить цвета линий графика, используя опцию конфигурации log.graphColors.

Что касается формата журналов, он похож на --oneline, с добавлением имени автора (относительно .mailmap) и относительной даты автора . Обратите внимание, что синтаксис %C(auto), который указывает Git использовать цвета по умолчанию для хэша коммита и т. Д., Поддерживается в Git> = 1.8.3 .

12 голосов
/ 01 апреля 2013

GitGraph

Создает представление PNG или SVG истории коммитов вашего репозитория Git.

https://code.google.com/p/gitgraph

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...