git branch のイラスト

GitK

リストに戻る

Gitk はグラフィカル リポジトリ ブラウザです。それはその種の最初のブラウザでした。これは git log の GUI ラッパーであると見なすことができます。リポジトリの履歴を調べたり、視覚化したりするのに便利です。これは tcl/tk で書かれているため、オペレーティング システム間で移植可能です。gitk は Paul Mackerras 氏によって Git コアとは別の独立したプロジェクトとして維持されています。安定バージョンは、エンドユーザーの利便性のために Git スイートの一部として配布されています。Gitk は Git を初めて利用する人にとって役に立つ学習補助になります。

Gitk の概要

Gitk は、バージョン管理経験がない人や、Subversion のような別のバージョン管理システムから移行する人にとって、役に立つ学習ユーティリティです。Gitk は Git コアにパッケージ化された便利なユーティリティです。Git の内部メカニズムを視覚化するのに役立つグラフィカル ユーザー インターフェイスを備えています。その他の人気のある Git GUI には、git-gui やアトラシアン独自の Sourcetree があります。

使用法

Gitk は git log と同様に呼び出されます。gitk コマンドを実行すると、以下のような Gitk UI が起動します。

左上のペインには、リポジトリへのコミットが表示され、最新のものが一番上に表示されます。右下には、選択したコミットによって影響を受けるファイルのリストが表示されます。左下のペインには、コミットの詳細と完全な差分が表示されます。右下のペインでファイルをクリックすると、左下のペインの差分が関連するセクションにフォーカスされます。

Gitk はリポジトリの現在の状態を反映しますブランチを変更するなど、別のコマンド ラインでリポジトリの状態を変更した場合、Gitk を再読み込みする必要があります。Gitk は、[File (ファイル)] メニュー -> [Reload (再読み込み)] で再読み込みできます。

既定では、Gitk は現在のコミットの履歴をレンダリングします。Gitk には、初期化時に渡すことができるさまざまなコマンド ライン オプションがあります。これらは主に Gitk のトップレベル ビューにレンダリングされるコミットのリストを制限するオプションです。これらのリビジョン オプションを使用した一般的な実行形式は次のとおりです。

オプション

    gitk [<options>] [<revision range>] [--] [<path>…]

    <revision range>

".." の形式のリビジョン範囲を渡すことで、 の間のすべてのリビジョンを表示できます。または、1 つのリビジョンを渡すことができます。

    <path>…

コミットを特定のファイル パスに制限します。パスをリビジョン名から切り離すには、"--" を使用して、先行するオプションからパスを分離します。

--all

すべてのブランチ、タグ、参照を表示します。

--branches[=<pattern>] --tags[=<pattern>] --remotes[=<pattern>]

選択した項目 (ブランチ、タグ、リモート) が、メインラインのコミットであるかのように表示されます。 を渡すと、指定したパターンにマッチするよう ref がさらに限定されます。

    --since=<date>

指定した日付より新しいコミットをレンダリングします。

    --until=<date>

指定した日付より古いコミットをレンダリングします。

    --date-order

コミットを日付順に並べ替えます。

    --merge

マージ中に特定された競合ファイルを変更するコミットを表示します。

    --left-right

コミットが差分のどちら側からのものかを示す情報ラベルをレンダリングします。左側からのコミットには < 記号、右側からのコミットには > 記号が先頭に付きます。

    --ancestry-path

表示するコミットの範囲 (例: commit1.. commit2 または commit2 commit1) を指定した場合、commit1commit2 の間の祖先チェーンに直接存在するコミット、つまり commit1 の子孫であり、かつ commit2 の祖先であるコミットのみが表示されます。(詳しい説明は git-log (1) の "履歴の簡略化" を参照してください。)

L<start>,<end>:<file>

特定のコード行番号範囲の履歴を追跡できる強力なオプション。

説明と例

Gitk で価値ある出力を提供するためには、基盤となるリポジトリにコミット履歴が必要です。次のコードは、コミットがあり、1 つにマージされた 2 つのブランチを持つ新しいリポジトリを作成する、bash コマンド シーケンスです。

    mkdir gitkdemo &&
    cd gitkdemo &&
    git init . &&
    echo "hello world" > index.txt &&
    git add index.txt &&
    git commit -m "added index.txt with hello world content"

このデモ リポジトリは、Gitk で調べる良い例となるでしょう。このコマンド シーケンスでは、1 つのコミットと index.txt ファイルを含む新しいリポジトリが作成されます。それでは、gitk を呼び出してリポジトリを調べてみましょう。

Gitk では 2 つのコミットを比較できますか?

デモ リポジトリを続けて、追加のコミットを作成しましょう。

    echo "prpended content to index" >> index.txt &&
    git commit -am "prepended content to index"

先行するコマンドが実行されたら、gitk を再読み込みする必要があります。コマンド ラインから gitk を再読み込みするか、GUI を使用して [File (ファイル)] -> [Reload (再読み込み)] に移動します。再読み込みすると、新しい commit が表示されます。

main ブランチ ref が新しいコミットを指しているのがわかります。これら 2 つのコミットを比較するには、左上の履歴パネルを使用します。履歴パネルで、差分のベースとなるコミットをクリックします。選択したら、2 つ目のコミットを右クリックしてコンテキスト メニューを開きます。

このコンテキスト メニューには次のオプションがあります。

    Diff this -> selected
    Diff selected -> this

これらのオプションのいずれかを選択すると、左下のペインに 2 つのコミットの差分が表示されます。この例では以下のようになります。

差分の出力は、index.txt に 2 つのコミットの間に "prepended content to index" という新しい行が追加されたことを示しています。

Gitk を使用して 2 つのブランチを比較する方法

サンプル リポジトリを続けて、新しいブランチを作成しましょう。

    git checkout -b new_branch &&
    echo "new branch content" > new_branch_file.txt &&
    git add new_branch_file.txt &&
    git commit -m "new branch commit with new file and prepended content" &&
    echo "new branch index update" >> index.txt &&
    git commit -am "new branch commit to index.txt with new content"

この後のコマンド シーケンスでは、new_branch という名前の新しいブランチが作成され、そこに new_branch_file.txt というファイルが追加されます。さらに、index.txt に新しいコンテンツが追加され、その更新のために追加のコミットが行われます。これで、main より 2 コミット先の新しいブランチができました。これらの変更を反映するには Gitk を再読み込みする必要があります。

これは Git のブランチ メカニズムについて説明する絶好の学習機会です。Gitk では、コミットはコミットの直線シーケンスとして表示されます。ブランチという用語は、タイムラインに「ブランチ」またはフォークが予期されていることを意味します。Git ブランチは他のバージョン管理システムとは異なります。Git ではブランチはコミットを指すポインタです。ブランチを作成すると、ポインタがコミットに移動します。git ブランチを作成しても、リポジトリやソースツリーの構造は変わりません。新しいポインタを作成しているだけです。

2 つのブランチ間で異なるコミットを比較するには、Gitk を指定したリビジョン範囲で起動する必要があります。gitk main.. new_branch を実行すると、2 つのブランチ参照間のコミットだけで Gitk が開きます。

これは、ブランチを比較するための強力なユーティリティです。

Gitk と Git Gui

Git Gui は、Git に対するもう 1 つの Tcl/Tk ベースのグラフィカル ユーザー インターフェイスです。Gitk はリポジトリの履歴のナビゲートと視覚化に焦点を当てていますが、Git Gui は個々のコミットや単一のファイル注釈の向上に焦点を当てており、プロジェクト履歴は表示しません。Git Gui には、履歴探索のために Gitk を起動するためのメニュー アクションも用意されています。Git Gui は、git gui を実行することでコマンドラインからも呼び出されます。

Gitk のまとめ

結論として、Gitk は git log のグラフィカル インターフェイス ラッパーです。Gitk は、リポジトリの履歴を視覚化して探索することに関して非常に強力です。Gitk は Git の内部構造を学ぶのにも役立つツールです。