Я бачив, що в деяких книгах і статтях є дуже гарні графіки гітів і коміксів. Як я можу зробити якісні зображення для друку з історії git?
Я бачив, що в деяких книгах і статтях є дуже гарні графіки гітів і коміксів. Як я можу зробити якісні зображення для друку з історії git?
Відповіді:
Оновлення: Ця відповідь привернула набагато більше уваги, ніж заслуговує. Спочатку він був розміщений, тому що я думаю, що графіки виглядають добре, і їх можна було переписати в Illustrator для публікації - і не було кращого рішення. Але зараз існує набагато більш застосовні відповіді на це питання, такі як фракц , джубоби або Гаррі Лі ! Будь ласка, перейдіть на пропозицію !!
Оновлення 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 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)
модифікатор до імен ( %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 --all --decorate --oneline --graph
Далеко не кожен би займався git log
постійно, але коли вам це потрібно, просто пам’ятайте:
« Собака » = мерзотник журнал - LL - д ecorate - про neline - г Раф
git config --global alias.adog "log --all --decorate --oneline --graph"
--all
збираюся плакати (T_T) ДЯКУЮ!
Для текстового виводу ви можете спробувати:
git log --graph --abbrev-commit --decorate --date=relative --all
або:
git log --graph --oneline --decorate --all
або: ось графічний псевдонім для малювання графіка DAG.
--abbrev-commit --decorate
, і тоді це ідеально!
--abbrev-commit
якщо вам не потрібно--oneline
git log --graph --oneline --decorate --date=relative --all
--date
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.
Побудований на вершині 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}
:)
latex input.tex
для створення двигунів, а потім, нарешті, використовувати dvisvgm input.dvi
для створення SVG з прозорістю. Перетворити з SVG в растровий формат, як PNG, досить легко convert -antialias -density 300 -background none input.svg output.png
. До речі, ці зображення виглядають приголомшливо при повній прозорості. Все ще працюю над проблемою шрифту ... i.imgur.com/1Xu2Ry5.png
gitdags
на дорогу!
Gitg - це клон Gitk та GitX для GNOME (він також працює на KDE тощо), який показує досить кольоровий графік.
Він активно розвивається (станом на 2012 рік). Це дозволяє сортувати коміти (графічні вузли) або хронологічно, або топологічно , і приховати комітети, які не призводять до обраної гілки.
Він добре працює з великими сховищами та складними графіками залежностей.
Зразкові скріншоти, що показують сховища linux-git та linux-2.6:
SourceTree - це дуже добре. Він виводить гарну зовнішню історію середнього розміру та графік гілок: (наступне робиться на експериментальному проекті Git лише для того, щоб побачити деякі гілки). Підтримує Windows 7+ та Mac OS X 10.6+.
Я тільки що написав один інструмент, який може генерувати досить git фіксує графік за допомогою HTML / Canvas.
І надайте плагін jQuery, який спрощує його використання.
[github] https://github.com/tclh123/commiss-graph
Попередній перегляд:
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"
Ось як виглядає вихід на терміналі:
Я написав веб-інструмент для перетворення git-журналів у гарні графіки SVG: Bit-Booster - Інструмент для малювання режимі офлайн
Завантажити вихід із git log --pretty='%h|%p|%d'
безпосередньо в інструмент і натисніть на посилання "завантажити 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 (інструмент)
На основі сценарію Graphviz, який я знайшов у відповіді на відповідне запитання , я зламав рубіновий сценарій, який створює підсумковий вигляд сховища git. Він усуває всю лінійну історію і просто показує "цікаві" вчинки, тобто ті, у кого багато батьків, багатодітні діти, або на які вказує гілка чи тег. Ось фрагмент графіка, який він генерує для jquery :
git-big-picture та BranchMaster - це подібні інструменти, які намагаються показати лише структуру графіка високого рівня, лише показуючи, як пов’язані між собою теги, гілки, злиття тощо.
Це питання має ще кілька варіантів.
Я додав три користувальницьких команд: 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", очевидно, дебютує в цій версії. Це приємне доповнення, оскільки назви гілок отримають інше забарвлення. Це полегшує, наприклад, розрізнення місцевих та віддалених гілок.
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 ):
Для більш детального виводу тексту, будь ласка, спробуйте:
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
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)'"
gitg : переглядач репозиторіїв на базі gtk, це нове, але цікаве і корисне
http://git.gnome.org/browse/gitg
Я використовую його зараз
GitX
і досить хорошим у цьому. Рекомендую
Хоча іноді я використовую 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
Як бачите, це майже натискання клавіш на збереження псевдонімів, засноване на:
Дивіться в останній версії git (1.8.5 і вище), ви можете скористатися% C (auto) в оформленні заповнювача заповнення% d
Звідси все, що вам потрібно, - це добре розуміти gitrevision для фільтрування всього необхідного (щось на кшталт master..develop, де - спрощення-злиття може допомогти з довгостроковими гілками)
Потужність командного рядка - це швидкий конфігурація, що базується на ваших потребах (зрозумійте, репо не є унікальною конфігурацією журналу ключів, тому додавання --numstat, або --raw або --name-status іноді потрібно. Тут git log і псевдоніми - це швидкий, потужний і (з часом) найкрасивіший графік, який ви можете досягти. Навіть більше, із результатами, показаними за замовчуванням через пейджер (скажімо менше), ви завжди можете швидко шукати всередині результатів. Не впевнені? Ви завжди можете проаналізувати результат з такими проектами, як gitgraph
Дуже трохи налаштувавши дивовижну відповідь Сліппа , ви можете використовувати його псевдоніми для реєстрації лише однієї гілки:
[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
Я пропоную tig
https://github.com/jonas/tig
- набагато кращий інструмент командного рядка для git.
Ви можете використовувати домашню мову для встановлення tig на macOS:
$ brew install tig
$ tig
У мене є цей 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
конфігурації.
Що стосується формату журналів, він схожий --oneline
з додаванням імені автора (з повагою .mailmap
) та відносної дати автора . Зауважте, що %C(auto)
синтаксис, який вказує Git використовувати кольори за замовчуванням для здійснення хешу тощо, підтримується в Git> = 1.8.3 .
git log --graph --oneline
просто щоб переконатися, що oneliner не загубився
GitGraph
Створює зображення PNG або SVG історії фіксації вашого сховища Git.
git -c core.pager='less -SRF' log --oneline --graph --decorate
Це мій варіант терміналу, подібний до багатьох відповідей тут. Мені подобається регулювати передані прапори, less
щоб запобігти загортанню слова
Я встановив цей псевдонім для швидкого доступу, оскільки команда трохи громіздка.
Спробуйте дітаю . Він може перетворити будь-яку діаграму ASCII в зображення. Хоча це не було розроблено з урахуванням гілок Git, я був вражений результатами.
Джерело (файл txt):
+--------+
| hotfix |
+---+----+
|
--*<---*<---*
^
|
\--*<---*
|
+---+----+
| master |
+--------+
Команда:
java -jar ditaa0_9.jar ascii-graph.txt
Результат:
Він також підтримує кольори тла, пунктирні лінії, різні форми тощо. Дивіться приклади .
Якщо ваш репозиторій сидить у Gitlab, ви можете використовувати його графічне подання, яке відображається як SVG у вашому браузері.
Перейдіть до перегляду графіків вашого сховища, наприклад https://gitlab.com/gitlab-org/gitter/webapp/network/develop
Прокрутіть графік донизу (це ліниві навантаження здійснюються!)
За допомогою інспектора браузера скопіюйте елемент SVG у новий файл
Відкрийте його у вибраному рендері, наприклад Inkscape
Я не знаю про прямий інструмент, але, можливо, ви можете зламати скрипт, щоб експортувати дані у крапковий формат і відтворювати їх за допомогою графівізу.
io
команд на просту команду perl `git log [...]` працювала на мене.
brew install perl dot
і потім cpan common::sense IO::all
отримати залежності. Потім просто передайте висновок у відповідну команду, наприклад git-graphviz | dot -Tpng -o repo.png
. Однак вихід не сильно відрізняється від git-big-picture .
Один з демонстрацій веб-графічної бібліотеки Рафаеля є прикольним графіком фіксації Git .
Демонстрація є статичною, але вона повинна бути досить простою, щоб взяти код і поміняти своїми статичними даними на прямий набір даних - я думаю, що це лише дані Git фіксації у форматі JSON.
Демонстраційна версія тут: http://dmitrybaranovskiy.github.io/raphael/github/impact.html
Приємний та чистий зовнішній вигляд графічного git-графіку для оболонок
з хешами, як зазвичай, крім дерева графіків
або в додатковій колонці
Редагувати : Ви хочете почати відразу, не читаючи пояснень? Використовуйте фрагменти git, сценарій або фрагменти коду функції з розділу EDIT 5 нижче.
У всіх відповідях на це запитання жоден з них не показав чистого вигляду табличного вигляду для снарядів. Найближчою була ця відповідь з євангелій, з яких я почав.
Основний момент мого підходу - рахувати лише символи дерева, показані користувачеві. Потім заповніть їх на власну довжину пробілами.
Крім git вам потрібні ці інструменти
переважно на борту з будь-яким дистрибутивом 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 -nl500 'l' <<< "$graph"
щоб отримати всі символи (до 500 на рядок), ніж вибрати лише символи дерева: * | / \ _ і пробіли з
grep -Eo '\\\\|\||\/|\ |\*|_'
нарешті підрахуйте їх і підсумовуйте результат із вибраного нами значення довжини, що становить 9 у прикладі.
Для отримання розрахованої кількості пробілів ми використовуємо
seq -s' ' $whitespaces
і обрізати номери позицій за допомогою
tr -d '[:digit:]'
ніж додати їх у кінець нашого рядка графіка. Це воно!
У Git є хороший варіант форматування довжини специфікаторів виводу вже з синтаксису'%><(amount_of_characters,truncate_option)'
, який додає пробіли з лівої сторони '>' або справа '<' і може скоротити символи з початку 'ltrunc', середнього 'mtrunc' або кінця 'trunc'.
Це важливо , що вище використання PRINTF CMD те ж значення довжини для відповідного стовпчика мерзотника.
Веселіться, щоб створити свій власний чистий стіл, схожий на свої потреби.
Додатково:
Щоб отримати правильне значення довжини, ви можете скористатися наступним фрагментом
while read -r graph;do
chars=$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)
[[ $chars -gt ${max_chars:-0} ]] && max_chars=$chars
done < <(git log --all --graph --pretty=format:' ')
і використовуйте $ max_chars як правильне значення довжини вище.
EDIT 1 : Щойно зауважив, що підкреслений характер також використовується у дереві git та відповідно відредагуйте фрагменти коду. Якщо відсутні інші символи, залиште коментар.
EDIT 2 : Якщо ви хочете позбутися дужок навколо записів гілок та тегів, просто використовуйте "% D" замість "% d" у команді git, як у EDIT 3.
EDIT 3 : Можливо, варіант "автоматичного" кольору є саме тим, який ви найбільше віддаєте перевагу для записів гілок та тегів?
Змінення цієї частини команди git (колір 214 )
%C(214)%>(15,trunc)%D%C(reset)
до авто
%C(auto)%>(15,trunc)%D%C(reset)
РЕДАКТИКА 4 : Або вам подобається ваша власна суміш кольорів для цієї частини, вигадливий вихід із мерехтливою головкою?
Для того, щоб ми могли спочатку накреслити назви заголовків, гілок та тегів, нам потрібна опція "автоматичний" колір у нашій команді 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}
безпосередньо перед рядком
branch_all="$branch_all$(printf '%15s' "$branch")\n"
у нашому фрагменті коду. Значення заміни створюють кольори, наведені вище.
Наприклад, значення заміщення для голови є
3;5;1;38;5;196
де 3; позначає курсив, 5; для блимання та 1; 38; 5; 196 для кольору. Більше інформації почніть тут. Примітка. Така поведінка залежить від вашого улюбленого терміналу і тому може бути непридатною для використання.
Але ви можете вибрати будь-яке значення кольору.
ОГЛЯД значень кольору git та еквівалентів ANSI
Тут ви знайдете список із кольором / стилем git .
Якщо вам потрібен вихід на вашій консолі для отримання точних кольорів (малюнок вище зменшується stackoverflow), ви можете зробити висновок за допомогою
for ((i=0;i<=255;i++));do
while IFS='+' read -r tree hash;do
echo -e "$(printf '%-10s' "(bold $i)") $hash $(sed -nl500 'l' <<< "$hash"|grep -Eom 1 '[0-9;]*[0-9]m'|tr -d 'm')"
done < <(git log --all --graph --decorate=short --color --pretty=format:'+%C(bold '$i')%h%C(reset)'|head -n 1)
done
у вашому шляху проекту git, який використовує першу фіксацію з вашого виводу журналу git.
EDIT 5 : Як згадував член "Andras Deak", є кілька способів використання цього коду:
1) як псевдонім :
псевдонім не приймає параметри, але функція може , тому просто визначте у своєму .bashrc
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_tably (походить від таблиці) безпосередньо під ваш проект проекту git або звідти, де ви хочете, як перший параметр вашого git project path.
2) як оболонка-скрипт :
Я використовую його з можливістю передавати до нього каталог 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
[color "decorate"]
HEAD = bold blink italic 196
branch = 214
tag = bold 222
[alias]
count-log = log --all --graph --pretty=format:' '
tably-log = 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)'
tably = !bash -c '" \
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 < <(git count-log && echo); \
while IFS=+ read -r graph hash time branch message;do \
chars=$(sed -nl1000 \"l\" <<< \"$graph\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l); \
whitespaces=$(($max_chars-$chars)); \
whitespaces=$(seq -s\" \" $whitespaces|tr -d \"[:digit:]\"); \
graph_all=\"$graph_all$graph$whitespaces\n\"; \
hash_all=\"$hash_all$(printf \"%7s\" \"$hash\") \n\"; \
time_all=\"$time_all$(printf \"%12s\" \"$time\") \n\"; \
branch_all=\"$branch_all$(printf \"%15s\" \"$branch\")\n\"; \
message_all=\"$message_all$message\n\"; \
done < <(git tably-log && echo); \
paste -d\" \" <(echo -e \"$time_all\") <(echo -e \"$branch_all\") <(echo -e \"$graph_all\") \
<(echo -e \"$hash_all\") <(echo -e \"$message_all\"); \
'"
Чим просто дзвонити git tably
під будь-який шлях проекту.
Git настільки потужний, що ви можете змінювати голову, теги, ... безпосередньо, як показано вище, і взяти звідси .
Ще один фантазійний варіант - вибрати кольори дерева, які вам найбільше подобаються
[log]
graphColors = bold 160, blink 231 bold 239, bold 166, bold black 214, bold green, bold 24, cyan
це дає вам божевільний вигляд, але завжди табличний вихід з журналу git
Занадто багато моргає! Просто, щоб продемонструвати, що можливо. Занадто мало вказаних кольорів призводить до кольорових повторів.
Повна довідка .gitconfig - лише один клік.
ПРОТИ: Приємно стилізувати свій власний чистий стіл, схожий на ваші потреби.
деякі псевдоніми в ~ / .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'
Для користувачів 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 не працює.