Довольно git графы ветвей
Я видел, что в некоторых книгах и статьях есть действительно красивые графические разделы ветвей и коммитов git. Как сделать высококачественные печатные изображения git истории?
Ответы
Ответ 1
Обновление: этот ответ получил гораздо больше внимания, чем он заслуживает. Это было изначально опубликовано, потому что я считаю, что графики выглядят красиво, и их можно было нарисовать в Illustrator для публикации, и лучшего решения не было. Но теперь есть гораздо более приемлемые ответы на этот вопрос, например fracz, Jubobs, или Гарри Ли! Пожалуйста, перейдите к ним!
Обновление 2: я опубликовал улучшенную версию этого ответа для Визуализации отраслевой топологии в git, так как это гораздо более уместно. Эта версия включает lg3
, которая показывает как автора, так и информацию коммиттера, поэтому вы действительно должны это проверить. Оставив этот ответ на исторические (и, я соглашусь, реплики) причины, хотя я действительно соблазн просто удалить его.
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 lg2
выглядит следующим образом:
Ответ 2
Многие из ответов здесь хороши, но для тех, кто просто хочет получить ответ в одну строку без указания псевдонимов или чего-то еще, вот он:
git log --all --decorate --oneline --graph
Не все будут делать git log
все время, но когда вам это нужно, просто помните:
"Собака"= мерзавец журнал - это LL - д ecorate - о neline - г Раф
Ответ 3
Для текстового вывода вы можете попробовать:
git log --graph --abbrev-commit --decorate --date=relative --all
или:
git log --graph --oneline --decorate --all
или: здесь
псевдоним graphviz для рисования графа DAG.
Я лично использую gitx
, gitk --all
и gitnub
.
Ответ 4
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);
или с шаблоном metro
:
или с сообщениями о фиксации, авторами и тегами:
Проверьте это с помощью JSFiddle.
Создайте его с помощью Git Grapher от @bsara.
Ответ 5
Построено поверх TikZ и PGF, gitdags
представляет собой небольшой пакет LaTeX, который позволяет вам без особых усилий создавать графики графической графики и т.д.
Автоматическая генерация существующего графика фиксации репозитория не является целью gitdags
; графики, которые он производит, предназначены только для образовательных целей.
Я часто использую его для создания графиков для ответов на вопросы Git в качестве альтернативы графикам фиксации ASCII:
Вот пример такого графика, демонстрирующего эффекты простой перестановки:
\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}
Ответ 6
Gitg - это клон Gitk и GitX для GNOME (он также работает на KDE и т.д.), который показывает довольно цветной график.
Он активно развивается (с 2012 года). Он позволяет сортировать коммиты (узлы графа) либо в хронологическом порядке, либо топологически, и скрывать коммиты, которые не приводят к выбранной ветке.
Он отлично работает с большими репозиториями и сложными графиками зависимостей.
Пример скриншотов, показывающих репозитории linux- git и linux-2.6:
Ответ 7
SourceTree - действительно хороший. Он распечатывает хорошо выглядящую и среднюю историю и график ветвей: (в экспериментальном проекте Git выполняется следующее, чтобы увидеть некоторые ветки). Поддерживает Windows 7+ и Mac OS X 10.6 +.
http://www.sourcetreeapp.com/
Ответ 8
Я только что написал один инструмент, который может генерировать симпатичный git фиксирует граф, используя HTML/Canvas.
И создайте плагин jQuery, который упростит его использование.
[github] https://github.com/tclh123/commits-graph
Предварительный просмотр:
Ответ 9
git-forest
- отличный perl script, который я использую больше года, и вряд ли использую git log
команды напрямую.
Вот некоторые из вещей, которые мне нравятся в этом script:
- Он использует символы Юникода для рисования линий на графике, что дает более постоянный вид линий графика.
- Вы можете объединить
--reverse
с графическим выходом, что невозможно с помощью регулярной команды git log
.
- Он использует
git log
внутри, чтобы захватить список коммитов, поэтому все параметры, которые вы передаете на git log
, также можно передать и на этот script.
У меня есть псевдоним, использующий git-forest
следующим образом:
[alias]
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"
Вот как выглядит вывод на терминале:
Ответ 10
Основываясь на скрипте Graphviz, который я нашел в ответе на связанный вопрос, я взломал скрипт ruby, который создает сводное представление хранилища git. Он исключает всю линейную историю и просто показывает "интересные" коммиты, то есть те, у которых несколько родителей, несколько детей или на которые указывает ветка или тег. Вот фрагмент графика, который он генерирует для jquery:
git-big-picture и BranchMaster - похожие инструменты, которые пытаются показать только высокоуровневую структуру графика, показывая только то, как связаны теги, ветки, слияния и т.д.
У этого вопроса есть еще несколько вариантов.
Ответ 11
Я написал веб-инструмент для преобразования журналов 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, который может быть размещен непосредственно на любой странице (включая движок блогов blogpot!). Посмотрите на некоторые сообщения в блоге здесь:
http://bit-booster.blogspot.ca/
Вот скриншот образца HTML файла, сгенерированного инструментом:
http://bit-booster.com/graph.html (инструмент)
Ответ 12
В зависимости от того, как они выглядели. Я использую gitx, который делает такие снимки:
Вы можете сравнить git log --graph
vs. gitk с 24-way octopus merge (первоначально из http://clojure-log.n01se.net/date/2008-12-24.html):
Ответ 13
Я добавил три команды: 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)'
С 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);"'
[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);"'
EDIT: Это работает с git версией 1.9a. Значение цвета "auto", по-видимому, дебютирует в этом выпуске. Это приятное дополнение, потому что имена ветвей получат другой цвет. Это упрощает различие между локальными и удаленными ветвями, например.
Ответ 14
Для получения более подробного текстового вывода попробуйте:
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
Ответ 15
gitg: просмотрщик репозитория на основе gtk, новый, но интересный и полезный
http://git.gnome.org/browse/gitg
Я использую его в настоящее время
Ответ 16
Это мое мнение по этому вопросу:
Скриншот:
Использование:
git hist
- Показать историю текущей ветки
git hist --all
- Показать график всех ветвей (включая удаленные)
git hist master devel
- Показать отношения между двумя или более ветвями
git hist --branches
- Показать все локальные ветки
Добавить --topo-order
сортировки --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)'"
Ответ 17
Хотя иногда я использую 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 = relative (% ar): понимать активность в репо (иногда ветка немного коммитируется рядом с мастером, но месяцев назад от него).
См. в последней версии git (1.8.5 и выше), вы можете использовать% C (auto) в украшении заполнителя% d
Отсюда вам нужно хорошо понять gitrevisions, чтобы фильтровать все, что вам нужно (что-то вроде master..develop, где -simplify-merges может помощь с длинными ветвями)
Сила за командной строкой - это быстрая конфигурация, основанная на ваших потребностях (понять, что репо не является уникальной конфигурацией журнала ключей, поэтому иногда требуется добавить -numstat или -raw или -name-status. Здесь git log и aliases бывают быстрыми, мощными и (со временем) самым красивым графиком, который вы можете достичь. Более того, с выходом, показанным по умолчанию через пейджер (скажем, меньше), вы всегда можете быстро искать результаты внутри. всегда может анализировать результат с помощью таких проектов, как gitgraph
Ответ 18
Слегка подправив Слиппу потрясающий ответ, вы можете использовать его псевдонимы для входа только в одну ветку:
[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
Ответ 19
У меня есть псевдоним git log
в ~/.gitconfig
для просмотра истории графа:
[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'
При этом git l
выведет что-то вроде:
В Git 2.12 + вы даже можете настроить цвета линий графика, используя log.graphColors
конфигурации log.graphColors
.
Что касается формата журналов, он похож на --oneline
, с добавлением имени автора (относительно .mailmap
) и относительной даты автора. Обратите внимание, что синтаксис %C(auto)
, который указывает Git использовать цвета по умолчанию для хэша коммита и т.д., Поддерживается в Git> = 1.8.3.
Ответ 20
GitGraph
Создает PNG или SVG-представление вашей истории фиксации репозитория Git.
https://code.google.com/p/gitgraph
Ответ 21
Я предлагаю tig
https://github.com/jonas/tig, намного лучший инструмент командной строки для git.
Вы можете использовать homebrew для установки TIG на MacOS:
$ brew install tig
$ tig
Ответ 22
Попробовали ли вы gitk
или gitk --all
? Однако у него нет функции print/save img as.
Ответ 23
git -c core.pager='less -SRF' log --oneline --graph --decorate
Это моя терминальная вариация, похожая на многие ответы здесь. Мне нравится корректировать флаги, переданные в less
, чтобы предотвратить перенос слов.
Я установил это для псевдонима для быстрого доступа, так как команда немного громоздка.
Ответ 24
Попробуйте Дитаа. Он может преобразовать любую диаграмму ASCII в изображение. Хотя он не был разработан с учетом веток Git, я был впечатлен результатами.
Источник (текстовый файл):
+--------+
| hotfix |
+---+----+
|
--*<---*<---*
^
|
\--*<---*
|
+---+----+
| master |
+--------+
Команда:
java -jar ditaa0_9.jar ascii-graph.txt
Результат:
Он также поддерживает фоновые цвета, пунктирные линии, различные формы и многое другое. Смотрите примеры.
Ответ 25
Там фанк Git commit graph как одна из демонстраций Raphael веб-графической библиотеки.
Демонстрация статична, но достаточно легко взять код и поменять свои статические данные на живой набор данных - я думаю, что он просто Git фиксирует данные в формате JSON.
Демо здесь: http://dmitrybaranovskiy.github.io/raphael/github/impact.html
Ответ 26
Если ваш репозиторий находится на Gitlab, вы можете использовать его графическое представление, так как оно отображается в вашем браузере как SVG.
Перейдите в представление графика вашего репозитория, например, https://gitlab.com/gitlab-org/gitter/webapp/network/develop
Прокрутите график вниз до дна (ленивый загружает коммиты!)
Используйте инспектор браузера, чтобы скопировать элемент SVG в новый файл
Откройте его в выбранном вами рендерере, например, Inkscape
Ответ 27
Я не знаю о прямом инструменте, но, возможно, вы можете взломать script, чтобы экспортировать данные в формат точки и отобразить его с помощью графика.
Ответ 28
некоторые псевдонимы в ~/.oh-my-zsh/plugins/git/git.plugin.zsh
gke='\gitk --all $(git log -g --pretty=%h)'
glg='git log --stat'
glgg='git log --graph'
glgga='git log --graph --decorate --all'
glgm='git log --graph --max-count=10'
glgp='git log --stat -p'
glo='git log --oneline --decorate'
glog='git log --oneline --decorate --graph'
gloga='git log --oneline --decorate --graph --all'
glol='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit'
glola='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit --all'
Ответ 29
Для пользователей OSX я применил пример @gospes и немного изменил его для gsed (gnu-sed
, установленный через homebrew) и скорректировал цвета (для работы с черным фоном, не уверен, как может выглядеть исходный пример как это делается в примере, поскольку он указывает черный текст на терминале с черным фоном).
[alias]
# tree, vtree, stree support
logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(bold black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++ %C(bold black)%an%C(reset)%C(bold black): %s%C(reset)'
tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n %C(bold black)[%cr]%C(reset) %x09%C(bold black)%an: %s %C(reset)'
stree = !bash -c '" \
while IFS=+ read -r hash time branch message; do \
timelength=$(echo \"$time\" | gsed -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);"' | less -r
vtree = !bash -c '" \
while IFS=+ read -r hash time branch message; do \
timelength=$(echo \"$time\" | gsed -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);"' | less -r
Ключ для OSX - это сначала установить gnu sed (у которого есть опция -r). Наиболее легко сделать с помощью доморощенного, который не перезапишет установленный системой sed, а вместо этого установит gnu sed как "gsed". Надеюсь, это поможет @SlippD.Thompson, который прокомментировал выше о том, что OSX не работает.
Ответ 30
Глядя на этот разговор, попытался использовать мою любимую git-cola
& git-dag
. Запуск View->DAG...
из git-cola
и замена Log: master --
на --all
показывает симпатичный график со всеми ветвями.