1693

いくつかの本や記事に、Git のブランチとコミットの非常に見栄えの良いグラフが掲載されているのを見てきました。Git 履歴の印刷可能な高品質の画像を作成するにはどうすればよいですか?

4

36 に答える 36

2132

更新 2: Git でブランチ トポロジを視覚化するという質問に対するこの回答の改良版を投稿しました。そのバージョンには が含まれ lg3ており、作成者とコミッターの両方の情報が表示されるので、実際に確認する必要があります。歴史的な理由(および担当者、私は認めます)のためにこの回答を残しますが、私は本当にそれを削除したくなります.

私の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 lg1

次のようになりgit lg2ます。 git lg2


(注: fracz のJubobs の、またはHarry Lee のなど、この質問に対するより適切な回答が存在するようになりました!)

于 2012-01-31T04:22:36.107 に答える
413

テキスト出力の場合は、次のことを試すことができます。

git log --graph --abbrev-commit --decorate --date=relative --all

または:

git log --graph --oneline --decorate --all

または:DAGグラフを描画するためのGraphvizエイリアスは次のとおりです。

私は個人的に、、を使用gitxgitk --allgitnubいます。

于 2009-06-29T22:25:08.000 に答える
290

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);

Gitgraph.js で生成されたサンプル グラフ

またはmetroテンプレートを使用:

GitGraph.js メトロ テーマ

または、コミット メッセージ、作成者、およびタグを使用します。

コミット メッセージを含む GitGraph

JSFiddleでテストします。

@bsaraのGit Grapherで生成します。

于 2014-06-08T14:40:07.047 に答える
140

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}
于 2014-08-24T04:14:22.727 に答える
85

Gitgは GNOME 用の Gitk と GitX のクローンです (KDE などでも動作します)。きれいな色のグラフが表示されます。

積極的に開発されています(2012年現在)。コミット (グラフ ノード) を時系列またはトポロジー順に並べ替え、選択したブランチにつながらないコミットを非表示にすることができます。

大規模なリポジトリや複雑な依存関係グラフでも問題なく動作します。

linux-git および linux-2.6 リポジトリを示すスクリーンショットの例:

linux-git

Linux-2.6

于 2012-11-01T23:35:52.737 に答える
68

HTML/Canvasを使用してきれいな Git コミット グラフを生成できるツールを 1 つ作成しました。

また、使いやすい jQuery プラグインを提供します。

[GitHub] https://github.com/tclh123/commits-graph

プレビュー:

プレビュー

于 2014-01-14T15:07:57.287 に答える
62

Sourcetreeは本当に良いものです。見栄えの良い中サイズの履歴とブランチ グラフが出力されます (以下は、いくつかのブランチを表示するためだけに、実験的な Git プロジェクトで実行されます)。Windows 7 以降および Mac OS X 10.6 以降をサポートします。

Sourcetree の出力例

于 2012-09-17T00:52:19.073 に答える
58

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"

端末での出力は次のようになります。

ここに画像の説明を入力してください

于 2013-03-22T04:50:52.723 に答える
45

関連する質問への回答で見つけた Graphviz スクリプトに基づいて、Git リポジトリの概要ビューを作成するRuby スクリプトをハックしました。それはすべての線形履歴を省略し、「興味深い」コミット、つまり複数の親、複数の子を持つコミット、またはブランチまたはタグによって指されているコミットのみを表示します。jQuery用に生成されるグラフのスニペットを次に示します。

jQuery サンプル

git-big-pictureBranchMasterは、タグ、ブランチ、マージなどの関係のみを表示することで、グラフの高レベル構造のみを表示しようとする同様のツールです。

この質問にはさらにいくつかのオプションがあります。

于 2012-06-11T01:19:12.807 に答える
45

git treegit streeおよびの 3 つのカスタム コマンドを追加しまし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 streegit 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);"'

git_stree


[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_vtree


これは Git バージョン 1.9a で動作します。色の値「auto」は、このリリースで明らかにデビューしています。ブランチ名が異なる色になるので、これは素晴らしい追加です。これにより、たとえば、ローカル ブランチとリモート ブランチを簡単に区別できます。

于 2014-03-18T14:00:17.683 に答える
37

より詳細なテキスト出力については、以下を試してください。

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
于 2011-06-02T08:52:57.073 に答える
37

それは彼らがどのように見えたかによって異なります。次のような写真を作成するgitxを使用します。

単純なプロット

24 方向のタコのマージでgit log --graphgitkを比較できます(元はhttp://clojure-log.n01se.net/date/2008-12-24.htmlから):

24 通りの Git octopus マージ。 元の URL は http://lwn.net/images/ns/kernel/gitk-octopus.png でした。

于 2009-06-29T15:37:28.013 に答える
29

gitg : gtk ベースのリポジトリ ビューアー。これは新しいものですが、興味深くて便利です。

現在使用しています。

于 2011-04-03T06:39:15.140 に答える
28

私は時々gitgを使用しますが、いつもコマンド ラインに戻ります。

[alias]
    # Quick look at all repositories
    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 the 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 the 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 repositories without subject body commits (Vim repository, 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

ご覧のとおり、以下に基づいて、ほぼキーストロークを節約するエイリアスです。

  • --color: クリアルック
  • --graph: 親を可視化
  • --date-order: 最も分かりやすいレポの見方
  • --decorate: 誰が誰だ
  • --oneline: 多くの場合、コミットについて知っておく必要があるすべてのこと
  • --simplify-by-decoration: 初見の基本 (タグ、関連するマージ、ブランチのみ)
  • --all: このオプションの有無にかかわらず、すべてのエイリアスでキーストロークを保存します
  • --date=relative (%ar): リポジトリでのアクティビティを理解します (ブランチが master の近くに数か月前にコミットされている場合があります)

Git の最近のバージョン (1.8.5 以降) では、装飾プレースホルダー %d で %C(auto) を利用できます。

ここから必要なのは、必要なものをフィルタリングするためのgitrevisionsをよく理解することだけです (master..develop のようなもので、--simplify-merges長期的なブランチに役立つ可能性があります)。

コマンド ラインの背後にある機能は、ニーズに基づいて迅速に構成できることです (リポジトリは一意のキー ログ構成ではないことを理解してください。そのため、--numstat、--raw、または --name-status を追加する必要がある場合があります。ここgit logとエイリアス高速で強力で、(時間をかけて) 達成できる最も美しいグラフです. さらに, 出力はデフォルトでページャーを介して表示されます (控えめに言っても) 結果の中をいつでもすばやく検索できます. 納得できませんか? プロジェクトで常に結果を解析できますgitgraphのように。

于 2014-04-05T00:32:08.673 に答える
17

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
于 2013-01-16T22:20:58.653 に答える
14

gitkまたはを試してくださいgitk --all。ただし、関数としての印刷/保存imgはありません。

于 2009-06-29T13:14:48.007 に答える
14

グラフの履歴を表示するために、次の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作成日が追加されています。コミット ハッシュなどにデフォルトの色を使用するように Git に指示する構文は、Git >= 1.8.3でサポートされていることに注意してください。.mailmap%C(auto)

于 2016-10-05T15:46:35.930 に答える
12

ギットグラフ

Git リポジトリのコミット履歴の PNG または SVG 表現を生成します。

于 2013-04-01T14:03:01.760 に答える
6

Raphael Web グラフィックス ライブラリのデモの 1 つとして、ファンキーな Git コミット グラフがあります。

デモは静的ですが、コードを取得して、静的データをライブ データ セットに交換するのは簡単なはずです。JSON 形式の Git コミット データに過ぎないと思います。

デモはこちら: http://dmitrybaranovskiy.github.io/raphael/github/impact.html

于 2011-06-02T09:08:24.127 に答える
5

OS X ユーザーのために、私は @gospes の例を取り上げ、それを gsed ( Homebrewgnu-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

OS X の鍵は、最初に GNU sed (-r オプション付き) をインストールすることです。これは、システムにインストールされた sed を上書きせず、代わりに GNU sed を「gsed」としてインストールする Homebrew で最も簡単に実行できます。これが、OS X が機能しないことについて上でコメントした @SlippD.Thompson に役立つことを願っています。

于 2014-10-05T00:48:52.690 に答える
4

直接的なツールについてはわかりませんが、スクリプトをハックしてデータをドット形式にエクスポートし、Graphvizでレンダリングできるかもしれません。

于 2009-06-29T10:57:42.057 に答える
2

コミュニティのエイリアスは次のとおりgit lsです。git lsグラフを表示すると、各コミットは 1 行だけをカバーします。すべてが色付きで、役立つ情報が含まれています。他のブランチのコミット履歴を確認することもできます:

git config --global alias.ls '!f() { git log $1 --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cgreen\\ [%ae,%ar]" --decorate --graph; }; f'

使用法:

# shows commits graph on the current branch
git ls

# shows commits graph on the develop branch
git ls develop 

グラフ ビューは次のとおりです。 ここに画像の説明を入力

于 2021-12-20T09:15:43.213 に答える