Я видел, что в некоторых книгах и статьях есть действительно симпатичные графики веток и коммитов git. Как я могу сделать высококачественные печатные изображения из истории Git?
Если вы хотите качественный и пригодный для печати, мой инструмент ( bit-booster.com/graph.html ) преобразует «git log» в SVG. Для получения дополнительной информации см. Мой ответ .
Дж. Сильви Дэвис
2
Вы ищете инструмент для визуализации своей собственной истории Git или инструмент для построения диаграмм, который позволяет рисовать симпатичные «ветви Git»?
Я бы удалил тег направленные-ациклические графы, потому что он не имеет отношения к этому вопросу
Максим Дмитриев
Ответы:
1843
Обновление: Этот ответ привлек гораздо больше внимания, чем заслуживает. Первоначально он был опубликован, потому что я думаю, что графики выглядят хорошо, и их можно нарисовать в Illustrator для публикации - и лучшего решения не было. Но теперь существует гораздо больше применимых ответов на этот вопрос, таких как fracz , Jubobs или Harry Lee ! Пожалуйста, поднимите голос!
Обновление 2: я разместил улучшенную версию этого ответа в топологии ветвления Визуализация в git вопросе, так как это гораздо более уместно там. Эта версия включает в себя информацию lg3об авторе и коммиттере, так что вы действительно должны это проверить. Оставив этот ответ по историческим (& rep, я признаю) причинам, хотя мне очень хочется просто удалить его.
Мои 2 ¢ : у меня есть два псевдонима, которые я обычно добавляю в мой ~/.gitconfigфайл:
@ Турбо: Для меня цвета меняются в настройках профиля для моего приложения терминала (Terminal.app). Используемое вами терминальное приложение может поддерживать или не поддерживать изменение отображаемых цветов для данных цветов ANSI. Кроме того, тире (точнее, тире) была создана с помощью опции-shift- [дефис-минус ключ]. Я полагаю, что я ошибочно предположил, что все текущие платформы работают с Unicode.
Слипп Д. Томпсон
3
Ваши --date=relativeи --abbrev-commitизбыточны, потому что вы явно используете %crи %h, соответственно.
Отличный ответ. Я изменил команду так, чтобы она выглядела больше как вывод --oneline --decorate сlg = log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset)%C(auto)%d%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C (reset)' --all
Крейгом Мотлином
1202
Многие из ответов здесь хороши, но для тех, кто просто хочет получить ответ в одну строку без указания псевдонимов или чего-то еще, вот он:
git log --all --decorate --oneline --graph
Не все будут делать git logвсе время, но когда вам это нужно, просто помните:
« Собака » = мерзавец журнал - LL - д ecorate - о neline - г Раф
Мне нравятся эти два, так как они хорошо разделены между «git log» (short) и «git log» (long), поэтому я могу вызывать onelineверсию short ( ) большую часть времени, но если мне нужно больше подробностей, используйте длинную версию с полная информация о коммите. Тогда у меня есть два хороших отображения <leader>gl(короткий) и <leader>gll(длинный) в Vim.
icc97
253
Gitgraph.js позволяет рисовать красивые ветки Git без репозитория. Просто напишите код Javascript, который настраивает ваши ветки и коммиты и отображает их в браузере.
Стрелки должны указывать на родителей, но не на детей.
jub0bs
4
@Jubobs: Хороший вопрос. Это обычное препятствие для людей, пытающихся понять Git: они думают о последовательности времени, а не о наследовании. Прояснение того, что (почти) все в git относительно чего-то предшествующего, помогает всем остальным стать на свои места.
Слипп Д. Томпсон
6
Относительно направления стрелки из документов: * @param {Boolean} [options.reverseArrow = false] - Сделать стрелки указывающими на предков, если они истинны
Скотт,
2
К вашему сведению, увидев этот пост и поиграв с gitgraph.js, я решил создать небольшой инструмент, который в основном помещает пользовательский интерфейс в gitgraph.js. Это еще не закончено, и пользовательский интерфейс не там, где я хочу, но вклады приветствуются! посмотрите: github.com/bsara/git-grapher
bsara
123
Небольшой пакет LaTeX, созданный на основе TikZ & PGF , gitdagsпозволяет без труда создавать графики фиксации векторной графики и многое другое.
Автоматическая генерация графа коммитов существующего репозитория не является целью 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}
@ Это выглядит великолепно! Я также хотел бы несколько строк о том, как его использовать: рассмотрим пользователя Windows, у которого вообще не установлен LaTeX. Как сделать график с нуля?
VonC
1
@VonC Я не уверен, но если вы не хотите устанавливать LaTeX, вы можете создавать свои графики на ShareLatex и WriteLaTeX , и тому подобное. Я буду изучать его и расширять вики, когда у меня будет больше времени ... Не стесняйтесь продвигать пакет:)
jub0bs
Это отличные вещи! Я напишу учебник в какой-то момент, но сейчас я просто хотел упомянуть, что вы можете пост-обработать свои графики с помощью автономного документооборота (я использую функцию обрезки), использовать latex input.texдля генерации dvi, а затем, наконец, использовать dvisvgm input.dviсоздать SVG с прозрачностью. Преобразование из SVG в растровый формат, такой как PNG, достаточно просто convert -antialias -density 300 -background none input.svg output.png. Кстати, эти изображения выглядят потрясающе с полной прозрачностью. Все еще работаем над проблемой шрифтов ... i.imgur.com/1Xu2Ry5.png
Gitg - это клон Gitk и GitX для GNOME (он также работает на KDE и т. Д.), Который показывает довольно цветной график.
Он активно развивается (по состоянию на 2012 год). Это позволяет сортировать коммиты (узлы графа) либо в хронологическом, либо в топологическом отношении , а также скрывать коммиты, которые не ведут к выбранной ветви.
Он отлично работает с большими репозиториями и сложными графами зависимостей.
Примерные скриншоты с репозиториями linux-git и linux-2.6:
Выглядит хорошо, как вы получаете предварительно отформатированные данные для рисования этого графика?
Ольга
3
@ Ольга Я просто добавляю код бэкенда в свой репозиторий. Вы можете просмотреть его на GitHub.
Гарри Ли
60
Sourcetree действительно хороший. Он выводит на экран красивый и средний размер истории и ветвления: (следующее делается на экспериментальном проекте Git, чтобы увидеть некоторые ветки). Поддерживает Windows 7+ и Mac OS X 10.6+.
Он также доступен в App Store, поэтому обновление должно работать автоматически.
WebOrCode
Мне нравится график sourcetree, но я бы предпочел использовать командную строку, а настройки по умолчанию sourcetree всегда портят мои репозитории.
SgtPooki
SourceTree настаивает на том, чтобы вы создали учетную запись Atlassian (или использовали свою учетную запись google и предоставили Atlassian некоторые разрешения для получения электронной почты и информации о профиле), и после установки на Mac (OS X El Capitan v 10.11.5) произойдет сбой на этапе «Клонирование»: "fatal: не найдено сопоставление подмодулей в .gitmodules для пути" <путь пропущен> "", а также странное предупреждение: "шаблоны не найдены / usr / local / git / share / git-core / templates". Очень непонятные сообщения, не очень большие.
Дмитрий Шевкопляс
3
И после удаления не забудьте привести в порядок свои привилегии безопасности Google, которые вы предоставили ранее: myaccount.google.com/security -> Подключенные приложения и сайты -> Приложения, подключенные к вашей учетной записи -> Управление приложениями
Дмитрий Шевкопляс
56
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"
@ void.pointer - Да, этого не произойдет, потому что git-forest является perl-скриптом и имеет зависимости от perl-модуля. Запуск git под cygwin с установленными необходимыми Perl-модулями может быть лучшей альтернативой, которую вы можете получить, если вы действительно этого хотите в Windows :)
Tuxdude
1
Вау, в этом репо есть много отличных инструментов. Спасибо!
Eldelshell
1
Отлично работает @MinGW (MSYS) под Win $; установить CPANM; затем Git.pm; создайте псевдоним, и вы готовы к работе.
Sektor
что это за очень хороший эмулятор терминала, который вы используете? Мне нравятся вещи с графическим индикатором подсказок.
Загрузите вывод git log --pretty='%h|%p|%d'непосредственно в инструмент, а затем нажмите ссылку «download graph.svg».
Этот инструмент предназначен исключительно для клиентской части, поэтому никакие ваши данные Git не передаются на мой сервер. Вы также можете сохранить HTML + JS локально и запустить его, используя URL-адреса "file: ///". Проверено на Chrome 48 и Firefox 43 на Ubuntu 12.04.
Он генерирует HTML, который может быть размещен непосредственно на любой странице (включая движок блогов blogpot!). Посмотрите на некоторые сообщения в блоге здесь:
@ Джей, кажется, цвет отражает уровень отступа этой конкретной ветви, и эти ветви могут переместиться в другой столбец и, следовательно, изменить цвет.
Thorbjørn Ravn Andersen
44
Основываясь на скрипте Graphviz, который я нашел в ответе на связанный вопрос , я взломал скрипт ruby, который создает сводное представление хранилища git. Он исключает всю линейную историю и просто показывает «интересные» коммиты, то есть те, у которых несколько родителей, несколько детей или на которые указывает ветка или тег. Вот фрагмент графика, который он генерирует для jquery :
git-big-picture и BranchMaster - похожие инструменты, которые пытаются показать только высокоуровневую структуру графика, показывая только то, как связаны теги, ветви, слияния и т. д.
Я попробовал это, но не смог заставить точку работать правильно с выводом для нашего репо (42 ветви, 175 тегов, 42.000 фиксаций) ... Жаль ... Это именно то, что я искал!
Ксавье Нодет
1
@XavierNodet, если ваш репозиторий общедоступен и / или у вас есть сообщение об ошибке и т. Д., Пожалуйста, сообщите о проблеме на GitHub. Спасибо!
Мэтт МакГенри
38
Я добавил три пользовательских команд: git tree, git streeи git vtree. Я пойду по ним в таком порядке.
РЕДАКТИРОВАТЬ: Это работает с GIT версии 1.9a. Значение цвета 'auto', по-видимому, дебютирует в этом выпуске. Это хорошее дополнение, потому что названия ветвей получат другой цвет. Это облегчает различие между локальной и удаленной ветвями, например.
fatal: bad color value 'auto' for variable '--pretty format':(
Поворот
Оказалось, что это старая версия git. В репозитории Yum есть довольно устаревшая версия Git. Скомпилирован из источника (1.9), и он прекрасно работает. Это тоже красиво! Спасибо @gospes!
Поворот
Не идти на OS X:sed: illegal option -- r
Слипп Д. Томпсон
@ SlippD.Thompson: я использую Linux :). -R для расширенных регулярных выражений. По-видимому, у OSX-версии sed ее нет. Возможно, вы могли бы обновить sed. В противном случае вы можете просто переписать команду sed без расширенного регулярного выражения.
Госпс
1
Для Mac OS X sed используйте -E вместо -r
Бакстер Лопес
37
Зависит от того, как они выглядели. Я использую gitx, который делает такие картинки:
Забавно ... Я бы поклялся, что слышал, как ты говоришь "Слияние осьминога с 24 путями"!
DTY
4
Из любопытства кто-нибудь пытался извлечь GitX (или другой инструмент git с графическим интерфейсом) в автономный исполняемый файл? Если я не ошибаюсь, заставить Какао рисовать в векторный файл PDF не составит труда, и он удовлетворит потребность ОП в печатных изображениях высокого качества.
Слипп Д. Томпсон
Это было на S3 через skitch, прежде чем они переделали свою вещь. Я бы хотел, чтобы это все еще было. :(
Дастин
Просто заменили его на версию gitk от lwn.net/images/ns/kernel/gitk-octopus.png , связанную с clojure-log.n01se.net/date/2008-12-24.html . @ Дастин: надеюсь, что все в порядке. Это не то же самое изображение, но оно служит аналогичной цели. На снимке экрана это выглядит так, как будто это часть ядра Linux, так что я думаю, вы могли бы найти этот коммит и повторно взять эквивалентный скриншот gitx ....
naught101
34
Для более подробного текстового вывода, пожалуйста, попробуйте:
gitg : средство просмотра репозитория на основе gtk, это новое, но интересное и полезное http://git.gnome.org/browse/gitg
Я использую его в настоящее время
Как вы можете видеть, это почти клавиатурные псевдонимы, основанные на:
--цвет: чистый вид
--graph: визуализировать родителей
--date-order: самый понятный взгляд на репо
- украшать: кто есть кто
--oneline: много раз все, что вам нужно знать о коммите
--simplify-by-украшения: базовый для первого взгляда (только теги, соответствующие слияния, ветви)
--all: сохранение нажатий клавиш со всеми псевдонимами с и без этой опции
--date = относительный (% ar): Понимать активность в репо (иногда ветка - это всего лишь несколько коммитов рядом с мастером, но месяцы назад от него)
Смотрите в последней версии git (1.8.5 и выше) вы можете воспользоваться% C (авто) в декорации заполнителя% d
Отсюда все, что вам нужно, это хорошее понимание gitrevisions для фильтрации всего, что вам нужно (что-то вроде master..develop, где --simplify-merges может помочь с долгосрочными ветвями)
Мощь командной строки - это быстрое конфигурирование, основанное на ваших потребностях (понимайте, что репозиторий не является уникальной конфигурацией журнала ключей, поэтому иногда необходимо добавить --numstat, или --raw, или --name-status. Здесь git log и псевдонимы быстрые, мощные и (со временем) самый красивый график, который вы можете достичь. Более того, с выводом по умолчанию через пейджер (скажем, меньше) вы всегда можете быстро искать в результатах. Не уверен? Вы всегда можете проанализировать результат с такими проектами, как gitgraph
Очень хорошо. Добавив их в мой конфиг. Но я рекомендую изменить% Cred% d% Creset на% C (auto)% d% Creset, который даст разные цвета для имен удаленных или локальных ветвей
С этим на месте, git lбудет выводить что-то вроде:
В Git 2.12 + вы даже можете настроить цвета линий графика, используя log.graphColorsопцию конфигурации.
Что касается формата логов, то он похож --onelineна добавление имени автора (с уважением .mailmap) и относительной даты автора . Обратите внимание, что %C(auto)синтаксис, который говорит Git использовать цвета по умолчанию для хэша коммита и т. Д., Поддерживается в Git> = 1.8.3 .
Попробуйте Дитаа . Он может преобразовать любую диаграмму ASCII в изображение. Хотя он не был разработан с учетом веток Git, я был впечатлен результатами.
Я не знаю о прямом инструменте, но, возможно, вы можете взломать скрипт, чтобы экспортировать данные в точечный формат и визуализировать его с помощью Graphviz.
Попробуйте это github.com/gugod/bin/blob/master/git-graphviz . У меня не было всех зависимостей в моей корпоративной среде, поэтому изменение этих ioкоманд на простые команды perl `git log [...]` работало для меня.
Росс Роджерс
Если вы работаете на Mac и хотите попробовать этот скрипт, вы можете взять perl brew install perl dotи затем cpan common::sense IO::allполучить зависимости. Затем просто передайте вывод соответствующей команде, например git-graphviz | dot -Tpng -o repo.png. Однако вывод не сильно отличается от git-big-picture .
jrhorn424
6
В качестве одной из демоверсий библиотеки веб-графики Raphael есть забавный граф коммитов Git .
Демонстрация является статической, но должно быть достаточно просто взять код и обменять их статические данные на живой набор данных - я думаю, что это просто данные Git commit в формате JSON.
@Sven: Спасибо, что указали на это. Я исправил для вас неработающие ссылки, хотя имейте в виду, что этому ответу пять лет, и поэтому может появиться лучшее решение в последнее время.
Хороший и чистый вид табличного git-графика для оболочек
с хэшами, как обычно, помимо дерева графов
или в дополнительном столбце
Изменить : Вы хотите начать прямо сейчас, не читая объяснения? Используйте псевдонимы git, скрипты или фрагменты кода функций из раздела EDIT 5 ниже или даже самый удобный способ с EDIT 6 .
Во всех ответах на этот вопрос ни один из них не показал чистого табличного вида для оболочек. Наиболее близким был этот ответ от господа, откуда я начал.
Суть моего подхода заключается в подсчете только тех символов дерева, которые показаны пользователю. Затем заполните их до личной длины пробелами.
Кроме мерзавца вам нужны эти инструменты
Grep
вставить
Printf
СЭД
сл
тр
Туалет
в основном на борту с любым дистрибутивом Linux.
Фрагмент кода
while IFS=+ read -r graph hash time branch message;do
# count needed amount of whitespaces and create them
whitespaces=$((9-$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)))
whitespaces=$(seq -s' ' $whitespaces|tr -d '[:digit:]')
# show hashes besides the tree ...
#graph_all="$graph_all$graph$(printf '%7s' "$hash")$whitespaces \n"
# ... or in an own column
graph_all="$graph_all$graph$whitespaces\n"
hash_all="$hash_all$(printf '%7s' "$hash") \n"
# format all other columns
time_all="$time_all$(printf '%12s' "$time") \n"
branch_all="$branch_all$(printf '%15s' "$branch")\n"
message_all="$message_all$message\n"
done < <(git log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(214)%>(15,trunc)%d%C(reset)+%C(white)%s%C(reset)' && echo);
# paste the columns together and show the tablelike output
paste -d' ' <(echo -e "$time_all") <(echo -e "$branch_all") <(echo -e "$graph_all") <(echo -e "$hash_all") <(echo -e "$message_all")
Для расчета необходимых пробелов мы используем
sed -nl1000 'l' <<< "$graph"
получить все символы (до 1000 на строку), кроме выбора только символов дерева: * | / \ _ и пробелы с
grep -Eo '\\\\|\||\/|\ |\*|_'
наконец, подсчитайте их и вычтите результат из выбранного нами значения длины, которое в примере равно 9.
Для получения рассчитанного количества пробелов мы используем
seq -s' ' $whitespaces
и обрезать номера позиций с
tr -d '[:digit:]'
чем добавить их в конец нашей линии графа. Это оно!
У Git есть хорошая опция для форматирования длины выходных спецификаторов уже с синтаксисом'%><(amount_of_characters,truncate_option)' , который добавляет пробелы с левой стороны '>' или справа '<' и может обрезать символы с начала 'ltrunc', середины 'mtrunc' или конца 'TRUNC.
Это важно , что выше использование PRINTF CMD то же значение длины для соответствующего столбца мерзавца.
Получайте удовольствие от того, чтобы создать свой собственный чистый, похожий на стол выход для ваших нужд.
Дополнительно:
Чтобы получить правильное значение длины, вы можете использовать следующий фрагмент
и используйте $ max_chars в качестве правильного значения длины выше.
РЕДАКТИРОВАТЬ 1 : Только что заметил, что символ подчеркивания также используется в дереве git и соответственно отредактируйте фрагменты кода выше. Если отсутствуют другие символы, пожалуйста, оставьте комментарий.
РЕДАКТИРОВАТЬ 2 : Если вы хотите избавиться от скобок вокруг записей веток и тегов, просто используйте «% D» вместо «% d» в команде git, как в EDIT 3.
РЕДАКТИРОВАТЬ 3 : Может быть, цветовая опция "auto" больше всего подходит для записей веток и тегов?
Измените эту часть команды git (цвет 214 )
%C(214)%>(15,trunc)%D%C(reset)
к авто
%C(auto)%>(15,trunc)%D%C(reset)
РЕДАКТИРОВАТЬ 4 : Или вам нравится ваша собственная цветовая смесь для этой части, причудливый вывод с мигающей головой?
Чтобы иметь возможность сначала стилизовать заголовок, имена веток и теги, нам нужна опция «auto» color в нашей команде git, как в EDIT 3.
Затем мы можем заменить известные значения цвета нашими собственными, добавив эти 3 строки
# branch name styling
branch=${branch//1;32m/38;5;214m}
# head styling
branch=${branch//1;36m/3;5;1;38;5;196m}
# tag styling
branch=${branch//1;33m/1;38;5;222m}
в нашем фрагменте кода. Значения замены производят цвета выше.
Например, значение замены для головы
3;5;1;38;5;196
где 3; обозначает курсив, 5; для мигания и 1; 38; 5; 196 для цвета. Для получения дополнительной информации начните здесь. Примечание. Это поведение зависит от вашего любимого терминала и, следовательно, может быть неприменимо.
НО вы можете выбрать любое значение цвета, которое вы предпочитаете.
function git_tably () {
unset branch_all graph_all hash_all message_all time_all max_chars
### add here the same code as under "2) as a shell-script" ###
}
и вызовите функцию git_bly (полученную из tablelike) непосредственно по пути вашего проекта git или из любого места, где путь к вашему проекту git является первым параметром.
2) в качестве shell-скрипта :
Я использую его с возможностью передать каталог проекта git в качестве первого параметра или, если он пуст, взять рабочий каталог как обычное поведение. В целом мы имеем
# edit your color/style preferences here or use empty values for git auto style
tag_style="1;38;5;222"
head_style="1;3;5;1;38;5;196"
branch_style="38;5;214"
# determine the max character length of your git tree
while IFS=+ read -r graph;do
chars_count=$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)
[[ $chars_count -gt ${max_chars:-0} ]] && max_chars=$chars_count
done < <(cd "${1:-"$PWD"}" && git log --all --graph --pretty=format:' ')
# create the columns for your prefered tablelike git graph output
while IFS=+ read -r graph hash time branch message;do
# count needed amount of whitespaces and create them
whitespaces=$(($max_chars-$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)))
whitespaces=$(seq -s' ' $whitespaces|tr -d '[:digit:]')
# show hashes besides the tree ...
#graph_all="$graph_all$graph$(printf '%7s' "$hash")$whitespaces \n"
# ... or in an own column
graph_all="$graph_all$graph$whitespaces\n"
hash_all="$hash_all$(printf '%7s' "$hash") \n"
# format all other columns
time_all="$time_all$(printf '%12s' "$time") \n"
branch=${branch//1;32m/${branch_style:-1;32}m}
branch=${branch//1;36m/${head_style:-1;36}m}
branch=${branch//1;33m/${tag_style:-1;33}m}
branch_all="$branch_all$(printf '%15s' "$branch")\n"
message_all="$message_all$message\n"
done < <(cd "${1:-"$PWD"}" && git log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(auto)%>(15,trunc)%D%C(reset)+%C(white)%s%C(reset)' && echo);
# paste the columns together and show the tablelike output
paste -d' ' <(echo -e "$time_all") <(echo -e "$branch_all") <(echo -e "$graph_all") <(echo -e "$hash_all") <(echo -e "$message_all")
3) в качестве псевдонима git :
Возможно, самый удобный способ - добавить псевдоним git в ваш .gitconfig
РЕДАКТИРОВАТЬ 6 :
Из-за ваших положительных голосов я улучшил фрагмент. Теперь вы можете передать его практически любой командой git log и больше не нужно адаптировать код. Попробуй это!
Как это работает?
определите свои команды git log в вашем .gitconfig как всегда
определить положительный номер столбца дерева (необязательно), где отображается граф git
Тогда просто позвони
git tably YourLogAlias
или
git tably YourLogAlias TreeColNumber
где TreeColNumber перезаписывает всегда определенное значение сверху.
Limitiation:
перед каждым заполнителем коммитов в вашей команде log вы должны использовать этот синтаксис с одним из параметров усечения
%><(<N>[,ltrunc|mtrunc|trunc])
(кроме последнего, если выбранный вами столбец дерева не самый последний)
В своем ответе вы должны объяснить, как эти фрагменты bash превратятся в необычные команды, подобные git log. Можно понять, пользуясь просмотром связанного с вами ответа, но ответы должны быть автономными
Андрас Дик
Вы имеете в виду, что я должен подробно объяснить git log cmd? Или не могли бы вы дать мне пример того, что вам не хватает, пожалуйста.
onemorequestion
Примечание. Вывод команды awesome git log используется этим фрагментом для получения табличного вывода на терминале. Итак, наоборот, как вы упомянули;)
вопрос
Я подумал, что вы не вводите 20 строк bash каждый раз, когда вам это нужно. Имеет смысл определить это как функцию bash или псевдоним git. Большинство читателей не будут пытаться завершить ваш код, чтобы его было легко использовать. Это то, что я имел в виду. Если вы просто поместите код в случайный файл sh на вашем пути, вы можете игнорировать меня.
Андрас Дик
1
Понимаю. Спасибо за ваш совет. Я отредактирую свой ответ и добавлю такой псевдоним. Обычно я использую файлы для таких «длинных» команд, как вы упомянули. Но я согласен, что писать обоими способами гораздо удобнее.
вопрос
5
некоторые псевдонимы в ~ / .oh-my-zsh / plugins / git / git.plugin.zsh
Для пользователей OSX я взял пример @gospes и немного изменил его для gsed ( gnu-sedустановленного через homebrew) и откорректировал цвета (для работы с черным фоном, не зная, как оригинальный пример может отобразить то же, что и в пример, поскольку он указывает черный текст на терминале с черным фоном).
Ключом для OSX является сначала установить gnu sed (которая имеет опцию -r). Проще всего это сделать с помощью homebrew, который не будет перезаписывать установленный системой sed, но вместо этого установит gnu sed как «gsed». Надеюсь, это поможет @ SlippD. Thompson, который прокомментировал выше о том, что OSX не работает.
Ответы:
Обновление: Этот ответ привлек гораздо больше внимания, чем заслуживает. Первоначально он был опубликован, потому что я думаю, что графики выглядят хорошо, и их можно нарисовать в Illustrator для публикации - и лучшего решения не было. Но теперь существует гораздо больше применимых ответов на этот вопрос, таких как fracz , Jubobs или Harry Lee ! Пожалуйста, поднимите голос!
Обновление 2: я разместил улучшенную версию этого ответа в топологии ветвления Визуализация в git вопросе, так как это гораздо более уместно там. Эта версия включает в себя информацию
lg3
об авторе и коммиттере, так что вы действительно должны это проверить. Оставив этот ответ по историческим (& rep, я признаю) причинам, хотя мне очень хочется просто удалить его.Мои 2 ¢ : у меня есть два псевдонима, которые я обычно добавляю в мой
~/.gitconfig
файл:git lg
/git lg1
выглядит так:и
git lg2
выглядит так:источник
#202020
/#555555
, красный:#5d1a14
/#da4939
, зеленый:#424e24
/#a5c261
, желтый:#6f5028
/#ffc66d
, синий:#263e4e
/#6d9cbe
, пурпурный:#3e1f50
/#a256c7
, голубой:#234e3f
/#62c1a1
и белый:#979797
/#ffffff
.--date=relative
и--abbrev-commit
избыточны, потому что вы явно используете%cr
и%h
, соответственно.%C(auto)
модификатор в refnames (%d
), чтобы получить более приятные цвета. См stackoverflow.com/questions/5889878/color-in-git-log/...lg = log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset)%C(auto)%d%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C (reset)' --all
Многие из ответов здесь хороши, но для тех, кто просто хочет получить ответ в одну строку без указания псевдонимов или чего-то еще, вот он:
Не все будут делать
git log
все время, но когда вам это нужно, просто помните:источник
git config --global alias.adog "log --all --decorate --oneline --graph"
--all
что собираюсь заплакать (T_T). СПАСИБО!Для текстового вывода вы можете попробовать:
или:
или: вот псевдоним graphviz для рисования графа DAG.
Я лично использую
gitx
,gitk --all
иgitnub
.источник
oneline
версию short ( ) большую часть времени, но если мне нужно больше подробностей, используйте длинную версию с полная информация о коммите. Тогда у меня есть два хороших отображения<leader>gl
(короткий) и<leader>gll
(длинный) в Vim.Gitgraph.js позволяет рисовать красивые ветки Git без репозитория. Просто напишите код Javascript, который настраивает ваши ветки и коммиты и отображает их в браузере.
или с
metro
шаблоном:или с сообщениями о коммитах, авторами и тегами:
Проверьте это с помощью JSFiddle .
Создайте его с помощью Git Grapher от @bsara.
источник
Небольшой пакет LaTeX, созданный на основе TikZ & PGF ,
gitdags
позволяет без труда создавать графики фиксации векторной графики и многое другое.Автоматическая генерация графа коммитов существующего репозитория не является целью
gitdags
; графики, которые он производит, предназначены только для образовательных целей .Я часто использую его для создания графиков для моих ответов на вопросы Git, в качестве альтернативы графам коммитов ASCII:
Вот пример такого графика, демонстрирующего эффекты простой перебазировки:
источник
:)
latex input.tex
для генерации dvi, а затем, наконец, использоватьdvisvgm input.dvi
создать SVG с прозрачностью. Преобразование из SVG в растровый формат, такой как PNG, достаточно простоconvert -antialias -density 300 -background none input.svg output.png
. Кстати, эти изображения выглядят потрясающе с полной прозрачностью. Все еще работаем над проблемой шрифтов ... i.imgur.com/1Xu2Ry5.pnggitdags
уже в пути!Gitg - это клон Gitk и GitX для GNOME (он также работает на KDE и т. Д.), Который показывает довольно цветной график.
Он активно развивается (по состоянию на 2012 год). Это позволяет сортировать коммиты (узлы графа) либо в хронологическом, либо в топологическом отношении , а также скрывать коммиты, которые не ведут к выбранной ветви.
Он отлично работает с большими репозиториями и сложными графами зависимостей.
Примерные скриншоты с репозиториями linux-git и linux-2.6:
источник
Я только что написал один инструмент, который может генерировать симпатичные графы коммитов с помощью HTML / Canvas.
И предоставить плагин JQuery, который делает его простым в использовании.
[github] https://github.com/tclh123/commits-graph
Предварительный просмотр:
источник
Sourcetree действительно хороший. Он выводит на экран красивый и средний размер истории и ветвления: (следующее делается на экспериментальном проекте Git, чтобы увидеть некоторые ветки). Поддерживает Windows 7+ и Mac OS X 10.6+.
источник
git-forest
это отличный Perl-скрипт, которым я пользуюсь больше года, и я больше не используюgit log
команду напрямую.Вот некоторые вещи, которые мне нравятся в этом сценарии:
--reverse
с выводом графика, что невозможно с помощью обычнойgit log
команды.git log
внутренне для получения списка коммитов, поэтому все опции, которые вы передаете,git log
также могут быть переданы в этот скрипт.У меня есть псевдоним, используя
git-forest
следующее:Вот как выглядит вывод на терминале:
источник
Я написал веб-инструмент для преобразования журналов 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 (инструмент)
источник
Основываясь на скрипте Graphviz, который я нашел в ответе на связанный вопрос , я взломал скрипт ruby, который создает сводное представление хранилища git. Он исключает всю линейную историю и просто показывает «интересные» коммиты, то есть те, у которых несколько родителей, несколько детей или на которые указывает ветка или тег. Вот фрагмент графика, который он генерирует для jquery :
git-big-picture и BranchMaster - похожие инструменты, которые пытаются показать только высокоуровневую структуру графика, показывая только то, как связаны теги, ветви, слияния и т. д.
У этого вопроса есть еще несколько вариантов.
источник
Я добавил три пользовательских команд:
git tree
,git stree
иgit vtree
. Я пойду по ним в таком порядке.С
git stree
иgit vtree
я использую Bash, чтобы помочь с форматированием.РЕДАКТИРОВАТЬ: Это работает с GIT версии 1.9a. Значение цвета 'auto', по-видимому, дебютирует в этом выпуске. Это хорошее дополнение, потому что названия ветвей получат другой цвет. Это облегчает различие между локальной и удаленной ветвями, например.
источник
fatal: bad color value 'auto' for variable '--pretty format'
:(sed: illegal option -- r
Зависит от того, как они выглядели. Я использую gitx, который делает такие картинки:
Вы можете сравнить
git log --graph
с gitk в слиянии осьминога с 24 путями (первоначально от http://clojure-log.n01se.net/date/2008-12-24.html ):источник
Для более подробного текстового вывода, пожалуйста, попробуйте:
Вы можете написать псевдоним в $ HOME / .gitconfig
источник
Это мое мнение по этому вопросу:
Скриншот:
Применение:
git hist
- Показать историю текущей веткиgit hist --all
- Показать график всех филиалов (включая пульты)git hist master devel
- Показать отношения между двумя или более ветвямиgit hist --branches
- Показать все местные филиалыДобавить
--topo-order
для сортировки фиксирует топологию, а не по дате (по умолчанию в этом псевдониме)Льготы:
--decorate
, так с разными цветами для разных названий ветокНастроить:
источник
gitg : средство просмотра репозитория на основе gtk, это новое, но интересное и полезное
http://git.gnome.org/browse/gitg
Я использую его в настоящее время
источник
GitX
и довольно хороший. РекомендуюХотя иногда я использую gitg , всегда возвращаюсь к командной строке:
Как вы можете видеть, это почти клавиатурные псевдонимы, основанные на:
Смотрите в последней версии git (1.8.5 и выше) вы можете воспользоваться% C (авто) в декорации заполнителя% d
Отсюда все, что вам нужно, это хорошее понимание gitrevisions для фильтрации всего, что вам нужно (что-то вроде master..develop, где --simplify-merges может помочь с долгосрочными ветвями)
Мощь командной строки - это быстрое конфигурирование, основанное на ваших потребностях (понимайте, что репозиторий не является уникальной конфигурацией журнала ключей, поэтому иногда необходимо добавить --numstat, или --raw, или --name-status. Здесь git log и псевдонимы быстрые, мощные и (со временем) самый красивый график, который вы можете достичь. Более того, с выводом по умолчанию через пейджер (скажем, меньше) вы всегда можете быстро искать в результатах. Не уверен? Вы всегда можете проанализировать результат с такими проектами, как gitgraph
источник
Слегка подправив удивительный ответ Слиппа , вы можете использовать его псевдонимы, чтобы регистрировать только одну ветку:
Оставив
--all
, теперь вы можете сделатьили даже
источник
Я предлагаю
tig
https://github.com/jonas/tig , намного лучший инструмент командной строки для git.Вы можете использовать homebrew для установки TIG на MacOS:
источник
У меня есть этот
git log
псевдоним~/.gitconfig
для просмотра истории графа:С этим на месте,
git l
будет выводить что-то вроде:В Git 2.12 + вы даже можете настроить цвета линий графика, используя
log.graphColors
опцию конфигурации.Что касается формата логов, то он похож
--oneline
на добавление имени автора (с уважением.mailmap
) и относительной даты автора . Обратите внимание, что%C(auto)
синтаксис, который говорит Git использовать цвета по умолчанию для хэша коммита и т. Д., Поддерживается в Git> = 1.8.3 .источник
git log --graph --oneline
просто чтобы убедиться, что он не потерянТы пробовал
gitk
илиgitk --all
? Однако он не имеет функции печати / сохранения в качестве функции.источник
--all
показывает вам все ветви.GitGraph
Создает представление PNG или SVG истории коммитов вашего репозитория Git.
https://code.google.com/p/gitgraph
источник
Это мой окончательный вариант, похожий на многие ответы здесь. Мне нравится корректировать передаваемые флаги,
less
чтобы предотвратить перенос слов.Я установил псевдоним для быстрого доступа, так как команда немного громоздка.
источник
Попробуйте Дитаа . Он может преобразовать любую диаграмму ASCII в изображение. Хотя он не был разработан с учетом веток Git, я был впечатлен результатами.
Источник (текстовый файл):
Команда:
Результат:
Он также поддерживает цвета фона, пунктирные линии, различные формы и многое другое. Смотрите примеры .
источник
Если ваш репозиторий находится на Gitlab, вы можете использовать его графическое представление, так как оно отображается в вашем браузере как SVG.
Перейдите к графическому представлению вашего хранилища, например, https://gitlab.com/gitlab-org/gitter/webapp/network/develop.
Прокрутите график вниз до дна (это ленивые загрузки фиксирует!)
Используйте инспектор вашего браузера, чтобы скопировать элемент SVG в новый файл
Откройте его в выбранном вами рендерере, например Inkscape
источник
Я не знаю о прямом инструменте, но, возможно, вы можете взломать скрипт, чтобы экспортировать данные в точечный формат и визуализировать его с помощью Graphviz.
источник
io
команд на простые команды perl `git log [...]` работало для меня.brew install perl dot
и затемcpan common::sense IO::all
получить зависимости. Затем просто передайте вывод соответствующей команде, напримерgit-graphviz | dot -Tpng -o repo.png
. Однако вывод не сильно отличается от git-big-picture .В качестве одной из демоверсий библиотеки веб-графики Raphael есть забавный граф коммитов Git .
Демонстрация является статической, но должно быть достаточно просто взять код и обменять их статические данные на живой набор данных - я думаю, что это просто данные Git commit в формате JSON.
Демоверсия здесь: http://dmitrybaranovskiy.github.io/raphael/github/impact.html
источник
Хороший и чистый вид табличного git-графика для оболочек
с хэшами, как обычно, помимо дерева графов
или в дополнительном столбце
Изменить : Вы хотите начать прямо сейчас, не читая объяснения? Используйте псевдонимы git, скрипты или фрагменты кода функций из раздела EDIT 5 ниже или даже самый удобный способ с EDIT 6 .
Во всех ответах на этот вопрос ни один из них не показал чистого табличного вида для оболочек. Наиболее близким был этот ответ от господа, откуда я начал.
Суть моего подхода заключается в подсчете только тех символов дерева, которые показаны пользователю. Затем заполните их до личной длины пробелами.
Кроме мерзавца вам нужны эти инструменты
в основном на борту с любым дистрибутивом Linux.
Фрагмент кода
Для расчета необходимых пробелов мы используем
получить все символы (до 1000 на строку), кроме выбора только символов дерева: * | / \ _ и пробелы с
наконец, подсчитайте их и вычтите результат из выбранного нами значения длины, которое в примере равно 9.
Для получения рассчитанного количества пробелов мы используем
и обрезать номера позиций с
чем добавить их в конец нашей линии графа. Это оно!
У Git есть хорошая опция для форматирования длины выходных спецификаторов уже с синтаксисом
'%><(amount_of_characters,truncate_option)'
, который добавляет пробелы с левой стороны '>' или справа '<' и может обрезать символы с начала 'ltrunc', середины 'mtrunc' или конца 'TRUNC.Это важно , что выше использование PRINTF CMD то же значение длины для соответствующего столбца мерзавца.
Получайте удовольствие от того, чтобы создать свой собственный чистый, похожий на стол выход для ваших нужд.
Дополнительно:
Чтобы получить правильное значение длины, вы можете использовать следующий фрагмент
и используйте $ max_chars в качестве правильного значения длины выше.
РЕДАКТИРОВАТЬ 1 : Только что заметил, что символ подчеркивания также используется в дереве git и соответственно отредактируйте фрагменты кода выше. Если отсутствуют другие символы, пожалуйста, оставьте комментарий.
РЕДАКТИРОВАТЬ 2 : Если вы хотите избавиться от скобок вокруг записей веток и тегов, просто используйте «% D» вместо «% d» в команде git, как в EDIT 3.
РЕДАКТИРОВАТЬ 3 : Может быть, цветовая опция "auto" больше всего подходит для записей веток и тегов?
Измените эту часть команды git (цвет 214 )
к авто
РЕДАКТИРОВАТЬ 4 : Или вам нравится ваша собственная цветовая смесь для этой части, причудливый вывод с мигающей головой?
Чтобы иметь возможность сначала стилизовать заголовок, имена веток и теги, нам нужна опция «auto» color в нашей команде git, как в EDIT 3.
Затем мы можем заменить известные значения цвета нашими собственными, добавив эти 3 строки
прямо перед линией
в нашем фрагменте кода. Значения замены производят цвета выше.
Например, значение замены для головы
где 3; обозначает курсив, 5; для мигания и 1; 38; 5; 196 для цвета. Для получения дополнительной информации начните здесь. Примечание. Это поведение зависит от вашего любимого терминала и, следовательно, может быть неприменимо.
НО вы можете выбрать любое значение цвета, которое вы предпочитаете.
ОБЗОР значений git color и эквивалентов ANSI
Вы найдете список с git color / style option здесь .
Если вам нужен вывод на вашу консоль для получения точных цветов (рисунок выше уменьшен с помощью stackoverflow), вы можете произвести вывод с помощью
в пути вашего проекта git, который использует первый коммит из вашего вывода журнала git.
РЕДАКТИРОВАТЬ 5 : Как отметил член "Андрас Дик", есть несколько способов использования этого кода:
1) как псевдоним :
псевдоним не принимает параметры, но функция может , поэтому просто укажите в вашем .bashrc
и вызовите функцию git_bly (полученную из tablelike) непосредственно по пути вашего проекта git или из любого места, где путь к вашему проекту git является первым параметром.
2) в качестве shell-скрипта :
Я использую его с возможностью передать каталог проекта git в качестве первого параметра или, если он пуст, взять рабочий каталог как обычное поведение. В целом мы имеем
3) в качестве псевдонима git :
Возможно, самый удобный способ - добавить псевдоним git в ваш .gitconfig
Чем просто позвонить
git tably
по любому пути проекта.Git настолько мощен, что вы можете изменить заголовок, теги, ... прямо как показано выше и взято отсюда .
Другой модный вариант - выбрать цвета дерева, которые вы предпочитаете больше всего.
это дает вам сумасшедший вид, но всегда табличный вывод журнала git
Слишком много миганий! Просто чтобы продемонстрировать, что это возможно. Слишком мало указанных цветов приводит к повторению цветов.
Полная ссылка .gitconfig находится всего в одном клике.
РЕДАКТИРОВАТЬ 6 : Из-за ваших положительных голосов я улучшил фрагмент. Теперь вы можете передать его практически любой командой git log и больше не нужно адаптировать код. Попробуй это!
Как это работает?
Тогда просто позвони
git tably YourLogAlias
или
git tably YourLogAlias TreeColNumber
где TreeColNumber перезаписывает всегда определенное значение сверху.
Limitiation:
перед каждым заполнителем коммитов в вашей команде log вы должны использовать этот синтаксис с одним из параметров усечения
%><(<N>[,ltrunc|mtrunc|trunc])
(кроме последнего, если выбранный вами столбец дерева не самый последний)
(объяснения синтаксиса см. https://git-scm.com/docs/pretty-formats )
если добавить другие символы для украшения , как
(committer:
,<
и ,>)
как и в...%C(dim white)(committer: %<(15,trunc)%cn%<(25,trunc)<%ce>)%C(reset)...
вы получите только табличный вывод с графиком в первом столбце
YourLogAlias-col
Теперь улучшенный фрагмент для вашего .gitconfig
Результаты:
или с новым TreeColNumber на лету
ОПЯТЬ: весело проведите время, чтобы оформить свой собственный чистый, похожий на стол вывод для своих нужд.
источник
некоторые псевдонимы в ~ / .oh-my-zsh / plugins / git / git.plugin.zsh
источник
Для пользователей OSX я взял пример @gospes и немного изменил его для gsed (
gnu-sed
установленного через homebrew) и откорректировал цвета (для работы с черным фоном, не зная, как оригинальный пример может отобразить то же, что и в пример, поскольку он указывает черный текст на терминале с черным фоном).Ключом для OSX является сначала установить gnu sed (которая имеет опцию -r). Проще всего это сделать с помощью homebrew, который не будет перезаписывать установленный системой sed, но вместо этого установит gnu sed как «gsed». Надеюсь, это поможет @ SlippD. Thompson, который прокомментировал выше о том, что OSX не работает.
источник