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

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

Ответы [ 31 ]

1694 голосов
/ 31 января 2012

Обновление: Этот ответ привлек гораздо больше внимания, чем он заслуживает. Первоначально он был опубликован, потому что я думаю, что графики выглядят хорошо, и их можно нарисовать в Illustrator для публикации - и лучшего решения не было. Но теперь существует гораздо больше применимых ответов на этот вопрос, таких как fracz s, Jubobs 'или Harry Lee 's! Пожалуйста, проголосуйте! !!

Обновление 2: я разместил улучшенную версию этого ответа на вопрос Визуализация топологии ветви в git , так как там он гораздо более уместен. Эта версия включает в себя lg3, которая показывает информацию как об авторе, так и о коммиттере, так что вы действительно должны проверить это. Оставляя этот ответ по историческим (& rep, я признаю) причинам, хотя я действительно испытываю желание просто удалить его.

2 ¢ : у меня есть два псевдонима, которые я обычно добавляю в файл ~/.gitconfig:

[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --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(dim white)- %an%C(reset)' --all
lg = !"git lg1"

git lg / git lg1 выглядит так:
git lg1

и git lg2 выглядит так:
git lg2

895 голосов
/ 29 января 2016

Многие из ответов здесь хороши, но для тех, кто просто хочет получить ответ от одной строки до точки без необходимости устанавливать псевдонимы или что-то еще, вот оно:

git log --all --decorate --oneline --graph

Не каждый будет делать git log все время, но когда вам это нужно, просто помните:

" A Dog " = git log - a ll - d ecorate - o neline - г Раф

enter image description here

315 голосов
/ 30 июня 2009

Для текстового вывода вы можете попробовать:

git log --graph --abbrev-commit --decorate --date=relative --all

или

git log --graph --oneline --decorate --all

или: вот псевдоним graphviz для рисования графа DAG.

Я лично использую gitx, gitk --all и gitnub.

214 голосов
/ 08 июня 2014

Gitgraph.js позволяет рисовать красивые ветки Git без хранилища. Просто напишите код Javascript, который настраивает ваши ветки и коммиты и отображает их в браузере.

var gitGraph = new GitGraph({
   template: "blackarrow",
   mode: "compact",
   orientation: "horizontal",
   reverseArrow: true
});

var master = gitGraph.branch("master").commit().commit();
var develop = gitGraph.branch("develop").commit();
master.commit();
develop.commit().commit();
develop.merge(master);

sample graph generated with Gitgraph.js

или metro шаблон:

GitGraph.js metro theme

или с сообщениями о коммитах, авторами и тегами:

GitGraph with commit messages

Проверьте это с JSFiddle .

Создайте его с помощью Git Grapher от @ bsara.

110 голосов
/ 24 августа 2014

Построенный поверх TikZ & PGF , gitdags - это небольшой пакет LaTeX, который позволяет вам легко создавать графики фиксации векторной графики и многое другое.

Автоматическая генерация графика фиксации существующего репозитория , а не цель gitdags; производимые им графики предназначены только для образовательных целей .

Я часто использую его для создания графиков для моих ответов на вопросы Git, в качестве альтернативы графам коммитов ASCII:

Вот пример такого графика, демонстрирующего эффекты простой перебазировки:

enter image description here

\documentclass{article}

\usepackage{subcaption}
\usepackage{gitdags}

\begin{document}

\begin{figure}
  \begin{subfigure}[b]{\textwidth}
    \centering
    \begin{tikzpicture}
      % Commit DAG
      \gitDAG[grow right sep = 2em]{
        A -- B -- { 
          C,
          D -- E,
        }
      };
      % Tag reference
      \gittag
        [v0p1]       % node name
        {v0.1}       % node text
        {above=of A} % node placement
        {A}          % target
      % Remote branch
      \gitremotebranch
        [origmaster]    % node name
        {origin/master} % node text
        {above=of C}    % node placement
        {C}             % target
      % Branch
      \gitbranch
        {master}     % node name and text 
        {above=of E} % node placement
        {E}          % target
      % HEAD reference
      \gitHEAD
        {above=of master} % node placement
        {master}          % target
    \end{tikzpicture}
    \subcaption{Before\ldots}
  \end{subfigure}

  \begin{subfigure}[b]{\textwidth}
    \centering
    \begin{tikzpicture}
      \gitDAG[grow right sep = 2em]{
        A -- B -- { 
          C -- D' -- E',
          {[nodes=unreachable] D -- E },
        }
      };
      % Tag reference
      \gittag
        [v0p1]       % node name
        {v0.1}       % node text
        {above=of A} % node placement
        {A}          % target
      % Remote branch
      \gitremotebranch
        [origmaster]    % node name
        {origin/master} % node text
        {above=of C}    % node placement
        {C}             % target
      % Branch
      \gitbranch
        {master}      % node name and text 
        {above=of E'} % node placement
        {E'}          % target
      % HEAD reference
      \gitHEAD
        {above=of master} % node placement
        {master}          % target
    \end{tikzpicture}
    \subcaption{\ldots{} and after \texttt{git rebase origin/master}}
  \end{subfigure}
  \caption{Demonstrating a typical \texttt{rebase}}
\end{figure}

\end{document}
73 голосов
/ 02 ноября 2012

Gitg - это клон Gitk и GitX для GNOME (он также работает на KDE и т. Д.), Который показывает довольно цветной график.

Активно развивается (по состоянию на 2012 год). Он позволяет сортировать коммиты (узлы графа) либо в хронологическом порядке, либо топологически , и скрывать коммиты, которые не приводят к выбранной ветви.

Отлично работает с большими репозиториями и сложными графами зависимостей.

Примеры снимков экрана, на которых показаны репозитории linux-git и linux-2.6:

linux-git

linux-2.6

57 голосов
/ 17 сентября 2012

SourceTree действительно хороший. Он выводит на экран красивый и средний размер истории и ветвления: (следующее делается на экспериментальном проекте Git, чтобы увидеть некоторые ветки). Поддерживает Windows 7+ и Mac OS X 10.6 +.

enter image description here

http://www.sourcetreeapp.com/

56 голосов
/ 14 января 2014

Я только что написал один инструмент, который может генерировать симпатичный граф git коммитов с использованием HTML / Canvas.

И предоставьте плагин jQuery, который облегчит использование.

[github] https://github.com/tclh123/commits-graph

Предварительный просмотр:

preview

53 голосов
/ 22 марта 2013

git-forest - это отличный Perl-скрипт, которым я пользуюсь более года, и я больше не использую команду git log напрямую.

Вот некоторые вещи, которые мне нравятся в этом сценарии:

  • Он использует символы Юникода для рисования линий на графике, давая более непрерывный вид линиям графика.
  • Вы можете комбинировать --reverse с выводом графика, что невозможно с помощью обычной команды git log.
  • Он использует git log для получения списка коммитов, поэтому все опции, которые вы передаете git log, также могут быть переданы в этот скрипт.

У меня есть псевдоним, использующий git-forest следующим образом:

[alias]
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"

Вот так выглядит вывод на терминале:

enter image description here

43 голосов
/ 11 июня 2012

Основываясь на сценарии Graphviz, который я нашел в ответе на связанный вопрос , я взломал сценарий ruby ​​, который создает сводное представление хранилища git. Он исключает всю линейную историю и просто показывает «интересные» коммиты, то есть те, у которых несколько родителей, несколько детей или на которые указывает ветвь или тег. Вот фрагмент графика, который он генерирует для jquery :

jquery sample

git-big-picture и BranchMaster - аналогичные инструменты, которые пытаются показать только высокоуровневую структуру графика, показывая только то, как теги, ветви, слияния и т. Д связаны между собой.

Этот вопрос имеет еще несколько вариантов.

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