本や記事の中に、gitブランチとコミットの非常に見栄えのよいグラフがいくつかあるのを見てきました。gitの履歴の高品質で印刷可能な画像を作成するにはどうすればよいですか?
本や記事の中に、gitブランチとコミットの非常に見栄えのよいグラフがいくつかあるのを見てきました。gitの履歴の高品質で印刷可能な画像を作成するにはどうすればよいですか?
回答:
更新:この答えは、それに値するよりもはるかに注目されています。元々投稿されたのは、グラフが見栄えがよく、Illustratorでパブリケーション用に描画できるためです。それ以上の解決策はありませんでした。しかし、今のようなこのQに対してはるかに適用答え、そこに存在するfraczさん、Jubobs '、またはハリーリーさんを!それらに賛成投票してください!!
更新2:git質問の視覚化ブランチトポロジにこの回答の改良版を投稿しました。そのバージョンには 、作者とコミッターの両方の情報を表示するが含まれlg3
ているため、実際に確認する必要があります。歴史的な理由で(&rep、私は認めます)この回答を残しますが、本当に削除したくなります。
私の2¢:通常、~/.gitconfig
ファイルにスローする2つのエイリアスがあります。
[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
ここでの回答の多くは素晴らしいですが、エイリアスやその他の設定をせずに、簡単な1行で適切な回答を求めている人のために、ここに示します。
git log --all --decorate --oneline --graph
誰もがgit log
いつもやっているわけではありませんが、必要なときは覚えておいてください:
" A Dog " = git log- a ll- d ecorate- o neline - g raph
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
テンプレート付き:
または、コミットメッセージ、作成者、タグを使用します。
@bsaraによるGit Grapherで生成します。
上に構築は、TikZ&PGF、gitdags
あなたは楽にベクトルグラフィックスは、グラフをコミットし、より生産することを可能にする小さなLaTeXのパッケージです。
既存のリポジトリのコミットグラフの自動生成はの目的ではありませんgitdags
。それが生成するグラフは、教育目的のためだけのものです。
ASCIIコミットグラフの代わりに、Gitの質問への回答のグラフを作成するためによく使用します。
以下は、単純なリベースの効果を示すそのようなグラフの例です。
\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}
:)
gitdags
!
SourceTreeは本当に良いものです。見栄えの良い中型の履歴とブランチグラフを出力します(以下は、いくつかのブランチを表示するためだけに、実験的なGitプロジェクトで実行されています)。Windows 7以降およびMac OS X 10.6以降をサポートします。
git-forest
1年以上使用してきた優れた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グラフに変換するためのWebツールを作成しました: Bit-Booster-オフラインコミットグラフ描画ツール
git log --pretty='%h|%p|%d'
ツールから出力を直接アップロードし、「download graph.svg」リンクをクリックします。
ツールは純粋なクライアント側であるため、Gitデータはサーバーと共有されません。HTML + JSをローカルに保存し、「file:///」URLを使用して実行することもできます。Ubuntu 12.04のChrome 48およびFirefox 43で検証済み。
任意のページ(ブログスポットのブログエンジンを含む!)に直接投稿できるHTMLを生成します。こちらのブログ投稿の一部をご覧ください。
http://bit-booster.blogspot.ca/
ツールによって生成されたサンプルHTMLファイルのスクリーンショットは次のとおりです。
関連する質問への回答で見つけたGraphvizスクリプトに基づいて、gitリポジトリの概要ビューを作成するRubyスクリプトをハッキングしました。すべての線形履歴を省略し、「興味深い」コミット、つまり、複数の親、複数の子、またはブランチやタグが指すコミットを表示します。jqueryに対して生成されるグラフのスニペットは次のとおりです。
git-big-pictureとBranchMasterは、タグ、ブランチ、マージなどの関係のみを表示することで、グラフの高レベルの構造のみを表示しようとする同様のツールです。
この質問にはいくつかのオプションがあります。
私は3つのカスタムコマンドを追加しました: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
Iまし利用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 と比較できます(最初は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
-2つ以上のブランチ間の関係を表示する
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を追加する必要がある場合があります。ここでgitログエイリアスは高速で強力であり、(時間とともに)実現できる最も美しいグラフです。さらに、デフォルトでポケットベルを通じて出力が表示されるため(たとえば、少ない)、常に結果内をすばやく検索できます。確信が持てませんか?常に結果を解析できますgitgraphのようなプロジェクト
Slippの素晴らしい答えを少し微調整すると、彼のエイリアスを使用して1つのブランチだけをログに記録できます。
[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のはるかに優れたコマンドラインツールです。
homebrewを使用して、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に指示する構文は、Git> = 1.8.3でサポートされています。
git log --graph --oneline
ワンライナーが迷子になっていないことを確認するためだけに
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とそれほど変わりません。
Raphael Webグラフィックライブラリのデモの1つとして、ファンキーなGitコミットグラフがあります。
デモは静的ですが、コードを取得してそれらの静的データをライブデータセットに交換するのは簡単です。JSON形式のGitコミットデータにすぎないと思います。
デモはこちら:http : //dmitrybaranovskiy.github.io/raphael/github/impact.html
シェル用の見栄えがよくきれいなテーブルのようなgitグラフ出力
通常のグラフツリーのほかにハッシュを使用
または追加の列
編集:説明を読まずにすぐに始めたいですか?以下の編集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"
ツリーの文字のみを選択するよりも、すべての文字(1行あたり500まで)を取得するには:/ \ _と空白
grep -Eo '\\\\|\||\/|\ |\*|_'
最後にそれらをカウントし、選択した長さの値(例では9)から結果を引きます。
使用する空白の計算された量を生成するには
seq -s' ' $whitespaces
と位置番号を切り捨てます
tr -d '[:digit:]'
それらをグラフの行の最後に追加します。それでおしまい!
Gitには、すでに構文で出力指定子の長さをフォーマットする素晴らしいオプションがあります'%><(amount_of_characters,truncate_option)'
。これにより、左側の「>」または右側の「<」から空白が追加され、先頭の「ltrunc」、中央の「mtrunc」または末尾から文字が切り捨てられます「切り捨て」。
上記の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:ブランチとタグエントリの周りのブラケットを削除する場合は、編集3のように、gitコマンドで「%d」の代わりに「%D」を使用します。
編集3:おそらく「自動」カラーオプションは、ブランチとタグのエントリに最も好むものですか?
gitコマンドのこの部分を変更します(色214)
%C(214)%>(15,trunc)%D%C(reset)
自動
%C(auto)%>(15,trunc)%D%C(reset)
編集4:または、その部分の独自のカラーミックス、点滅する頭を持つ派手な出力が好きですか?
ヘッド、ブランチ名、タグをスタイルできるようにするには、最初にEDIT 3のようにgitコマンドに「auto」カラーオプションが必要です。
次に、これらの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"
私たちのコードスニペットで。置換値は上記の色を生成します。
たとえば、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_tably(tablelikeから派生)をgitプロジェクトパスの直下に、または最初のパラメーターとしてgitプロジェクトパスを使用して、どこからでも呼び出します。
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エイリアスとして:
おそらく最も快適な方法は、.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ログ出力を与える
点滅が多すぎます!何が可能かを示すだけです。指定された色が少なすぎると、色が繰り返されます。
完全な.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を上書きせず、代わりに「gsed」としてgnu sedをインストールするhomebrewで最も簡単に実行できます。これがOSXが機能しないことについて上記でコメントした @ SlippD.Thompsonに役立つことを願っています。