私はいくつかの本や記事にgitのブランチとコミットのグラフがとてもきれいに見えるのを見ました。 gitの履歴を高品質で印刷可能な画像にするにはどうすればいいですか?
更新:この答えはそれが値するよりはるかに注目を集めています。これはもともと掲載されたものです。なぜなら、グラフは見栄えがよく、出版用にIllustratorで描画できる可能性があるからです。これ以上の解決策はありません。しかし、 fracz 、 Jubobs 、 Harry Lee のように、このQに対するより適切な答えが今や存在します。それらを投票してください!
更新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
は次のようになります。
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パッケージで、ベクトルグラフィックのコミットグラフなどを簡単に作成できます。
既存のリポジトリのコミットグラフの自動生成は not の目的は gitdags
です。それが作り出すグラフは 教育目的 のためだけに意図されています。
ASCII commit graphに代わるものとして、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}
SourceTreeは本当に良いものです。見栄えの良い中規模の履歴とブランチグラフが表示されます。 Windows 7以降およびMac OS X 10.6以降をサポートします。
私はHTML/Canvasを使ってかわいいgitのコミットグラフを生成できるツールを1つだけ書きました。
そしてそれを使いやすくするjQueryプラグインを提供してください。
[github] https://github.com/tclh123/commits-graph
プレビュー:
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"
端末上での出力は次のようになります。
関連する質問への回答 で見つけたGraphvizスクリプトに基づいて、 Rubyスクリプトをハックアップしました これはgitリポジトリの概要ビューを作成します。これはすべての線形履歴を取り除き、単に「おもしろい」コミット、つまり複数の親、複数の子供を持つコミット、またはブランチやタグで指し示されたコミットを示します。これが jquery 用に生成するグラフの一部です。
git-big-picture および BranchMaster は、タグ、ブランチ、マージなどがどのように関連しているかを表示するだけで、グラフの上位レベルの構造のみを表示しようとする類似のツールです。
この質問 にはさらにいくつかの選択肢があります。
私はgitログをきれいなSVGグラフに変換するためのWebツールを書きました: ビットブースター - オフラインコミットグラフ描画ツール
git log --pretty='%h|%p|%d'
からの出力を直接ツールにアップロードしてから、「download graph.svg」リンクをクリックしてください。
このツールは純粋なクライアントサイドなので、あなたのGitデータは私のサーバーと共有されていません。 HTML + JSをローカルに保存して、 "file:///"というURLを使用して実行することもできます。 Ubuntu 12.04上のChrome 48およびFirefox 43で検証済み。
(blogspotブログエンジンを含む)あらゆるページに直接投稿できるHTMLを生成します。ここでいくつかのブログ記事を見てください。
http://bit-booster.blogspot.ca/ /
これは、ツールによって生成されたサンプルHTMLファイルのスクリーンショットです。
彼らがどのように見えたかによります。私は gitx を使います。
git log --graph
とgitkを24通りのタコのマージで比較できます(もともと http://clojure-log.n01se.net/date/2008-12-24.html から):
git tree
、git stree
、git vtree
の3つのカスタムコマンドを追加しました。私はその順番でそれらを見ていきます。
[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'はこのリリースで明らかにデビューしています。枝の名前が違う色になるので、これは素晴らしい追加です。これにより、たとえばローカルブランチとリモートブランチを区別しやすくなります。
より詳細なテキスト出力については、試してください。
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
gitg :gtkベースのリポジトリビューア、これは新しくても面白くて便利です
http://git.gnome.org/browse/gitg
現在使っています
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 を使うこともありますが、常にコマンドラインに戻ってください。
[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(自動)の恩恵を受けることができます。
ここから必要なのは、 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
グラフの履歴を見るために、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
configurationオプションを使ってグラフの線の色をカスタマイズすることさえできます。
ログのフォーマットに関しては、 --oneline
に似ていますが、 著者名 (.mailmap
を尊重する)と 相対的な著者日付 が追加されています。コミットハッシュなどにデフォルトの色を使用するようGitに指示する%C(auto)
構文は、Git> = 1.8.3 でサポートされていることに注意してください。
私はtig
https://github.com/jonas/tig 、git用のずっと良いコマンドラインツールを提案します。
自作を使用してmacOSにtigをインストールすることができます。
$ brew install tig
$ tig
gitk
またはgitk --all
を試しましたか?しかし、それは関数としてprint/save imgを持っていません。
Raphael Webグラフィックライブラリのデモの1つとしてファンキーなGitコミットグラフがあります。
デモは静的ですが、コードを取得して静的データを実際のデータセットと交換するのは十分に簡単なはずです。JSON形式のGit commit dataにすぎないと思います。
デモはこちらです: http://dmitrybaranovskiy.github.io/raphael/github/impact.html
直接のツールについてはわかりませんが、データをドット形式にエクスポートしてgraphvizでレンダリングするスクリプトをハッキングすることができます。
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"としてインストールします。これが@ SlippD.Thompsonに役立つことを願っています 上記でコメントしました OSXが機能していないことについて。
〜/ .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'
リポジトリがGitlab上にある場合は、ブラウザでSVGとしてレンダリングされるので、そのグラフ表現を使用できます。
リポジトリのグラフビューに移動します。 https://gitlab.com/gitlab-org/gitter/webapp/network/develop
グラフを一番下までスクロールします(コミットが遅延ロードされます)。
ブラウザのインスペクタを使ってSVG要素を新しいファイルにコピーします。
好みのレンダラで開きます。インクスケープ
この会話を見て私のお気に入りのgit-cola
とgit-dag
を使用しようとしました。 View->DAG...
からgit-cola
を実行し、 Log: master --
を--all
に置き換えると、すべての分岐を含むきれいなグラフが表示されます。
'Slipp D. Thompson'の答えに加えて、私はあなたが同じ装飾を持つがコミットによる単一行でこのエイリアスを追加することを提案します。
git config --global alias.tre "log --graph --decorate --pretty=oneline --abbrev-commit --all --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)'"