我看过一些书籍和文章中有一些非常漂亮的git分支和提交图。如何制作git历史记录的高质量可打印图像?
我看过一些书籍和文章中有一些非常漂亮的git分支和提交图。如何制作git历史记录的高质量可打印图像?
Answers:
更新:这个答案已经引起了远远超出应有的关注。最初发布是因为我认为这些图形看起来不错,可以在Illustrator中绘制它们以进行发布-并且没有更好的解决方案。但是,现在对此问题存在更多适用的答案,例如fracz,Jubobs或Harry Lee的答案!请去投票那些!!
更新2:对于git问题中的Visualization分支拓扑,我已经发布了此答案的改进版本,因为它在那里更合适。该版本包括 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
。
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
,但是当您需要时,请记住:
“ 狗 ”= GIT中的日志- 一个 LL - d 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图的graphviz别名。
--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测试它。
使用@bsara 使用Git Grapher生成它。
建立在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}
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
gitdags
即将发布!
SourceTree是一个非常好的产品。它的确打印出了美观,中等大小的历史记录和分支图:(以下是在一个实验性的Git项目上完成的,只是为了看到一些分支)。支持Windows 7+和Mac OS X 10.6+。
我只是写了一个工具,可以使用HTML / Canvas生成漂亮的git commits图。
并提供一个易于使用的jQuery插件。
[github] https://github.com/tclh123/commits-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"
这是终端上的输出结果:
我编写了一个Web工具,用于将git日志转换为漂亮的SVG图: Bit-Booster-脱机提交图绘制工具
git log --pretty='%h|%p|%d'
直接将输出上传到工具中,然后单击“下载graph.svg”链接。
该工具是纯客户端,因此您的Git数据都不会与我的服务器共享。您还可以在本地保存HTML + JS,然后使用“ file:///” URL来运行它。在Ubuntu 12.04上的Chrome 48和Firefox 43上进行了验证。
它生成的HTML可以直接发布到任何页面(包括blogspot博客引擎!)。在这里看一些博客文章:
http://bit-booster.blogspot.ca/
这是该工具生成的示例HTML文件的屏幕截图:
基于我在一个相关问题的答案中找到的Graphviz脚本,我破解了一个ruby脚本,该脚本创建了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);"'
编辑:这适用于git版本1.9a。颜色值“ auto”显然在此版本中首次亮相。这是一个很好的补充,因为分支名称将获得不同的颜色。例如,这使得更容易区分本地和远程分支。
fatal: bad color value 'auto' for variable '--pretty format'
:(
sed: illegal option -- r
取决于他们的模样。我使用gitx制作像这样的图片:
您可以git log --graph
在24路章鱼合并中比较gitk和gitk(最初来自http://clojure-log.n01se.net/date/2008-12-24.html):
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及更高版本),您可以在装饰占位符%d中受益于%C(auto)
从这里,您需要的是对gitrevisions的充分了解以过滤所需的内容(例如master..develop,其中--simplify-merges可以帮助您建立长期分支机构)
命令行的功能是根据您的需要进行快速配置(了解存储库不是唯一的键日志配置,因此有时需要添加--numstat或--raw或--name-status。别名快速,强大并且可以(随时间变化)获得最漂亮的图形,甚至更多,默认情况下通过分页器显示输出(少说),您可以始终在结果内部快速搜索。像gitgraph这样的项目
略微调整了Slipp的出色答案,您可以使用他的别名仅记录一个分支:
[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命令行工具。
您可以使用自制软件在macOS上安装tig:
$ 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> = 1.8.3支持语法,该语法告诉Git使用默认颜色进行提交哈希,等等。
git log --graph --oneline
只是为了确保oneliner不会迷路
尝试ditaa。它可以将任何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
我不了解直接工具,但也许您可以修改脚本以将数据导出为点格式并使用graphviz进行渲染。
io
命令更改为简单的perl`git log [...]命令对我来说很有用。
brew install perl dot
并cpan common::sense IO::all
获取依赖项。然后,将输出通过管道传递到适当的命令,例如git-graphviz | dot -Tpng -o repo.png
。但是,输出与git-big-picture没有太大不同。
有一个时髦的Git提交图,作为Raphael Web图形库的演示之一。
该演示是静态的,但是应该很容易拿到代码并将其静态数据换成一组实时数据-我认为这只是JSON格式的Git提交数据。
该演示在这里:http : //dmitrybaranovskiy.github.io/raphael/github/impact.html
一个漂亮,干净的表格形式的git图输出给shell
除了图树以外,通常还有哈希
或在额外的栏中
编辑:您想立即开始而不阅读说明吗?使用下面的EDIT 5部分中的git别名,脚本或功能代码段。
到目前为止,在这个问题的所有答案中,没有一个显示出像贝壳一样干净的表。最接近的答案是我从哪里开始的。
我的方法的核心点是仅计算显示给用户的树字符。然后使用空格将其填充到个人长度。
除了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对于相应的git列使用相同的长度值,这一点很重要。
有趣的是,您可以根据自己的需求来设计自己的干净桌子,就像看起来的输出。
额外:
要获取正确的长度值,可以使用以下代码段
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作为上面的正确长度值。
编辑1:刚注意到git树中也使用了下划线字符,并相应地编辑了上面的代码段。如果缺少其他字符,请发表评论。
编辑2:如果要摆脱分支和标记条目周围的括号,只需在git命令中使用“%D”而不是“%d”,就像在EDIT 3中一样。
编辑3:也许“自动”颜色选项是您最喜欢的分支和标记条目选项?
更改git命令的这一部分(颜色214)
%C(214)%>(15,trunc)%D%C(reset)
以汽车
%C(auto)%>(15,trunc)%D%C(reset)
编辑4:还是您喜欢该部分自己的颜色混合,一个带有眨眼头的精美输出?
为了能够首先设置标题,分支名称和标签的样式,我们需要像EDIT 3一样在git命令中使用“自动”颜色选项。
然后我们可以通过添加这三行来用我们自己的颜色替换已知的颜色值
# 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"
在我们的代码段中。替换值产生上面的颜色。
例如head的替换值是
3;5;1;38;5;196
其中3; 斜体字代表5;表示闪烁,颜色表示为1; 38; 5; 196。有关更多信息,请从此处开始。注意:此行为取决于您喜欢的终端,因此可能无法使用。
但是您可以选择任何喜欢的颜色值。
git颜色值和ANSI等效项的概述
您可以在此处找到带有git color / style选项的列表。
如果您需要控制台上的输出以获取准确的颜色(上图是通过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日志输出中的第一个提交。
编辑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项目路径下或从您希望使用git项目路径作为第一个参数的任何位置调用函数git_tably(源自tablelike)。
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别名:
也许最舒适的方法是在.gitconfig中添加git别名
[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 log输出
眨眼太多!只是为了证明可能。指定的颜色太少会导致颜色重复。
再次:乐于根据自己的需要来设计自己的干净桌子,就像看起来的输出一样。
〜/ .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
通过自制程序安装)并调整了颜色(以在黑色背景下工作,不知道原始示例如何能够呈现其在示例,因为它在背景为黑色的终端上指定了黑色文本)。
[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”。希望这对上面评论了OSX无法正常工作的@ SlippD.Thompson有所帮助。