チャプター ▾ 第2版

A1.1 付録A: 他の環境でのGit - グラフィカルインターフェース

この書籍を最後まで読んだことで、コマンドラインでGitを使用する方法について多くのことを学んだでしょう。ローカルファイルで作業し、ネットワーク経由で他のリポジトリに接続し、他者と効果的に共同作業を行うことができます。しかし、話はそこで終わりではありません。Gitは通常、より大きなエコシステムの一部として使用され、ターミナルが常に最適な作業方法とは限りません。ここでは、Gitが役立つ他の種類の環境と、他のアプリケーション(あなた自身のものを含む)がGitと連携する方法を見ていきます。

グラフィカルインターフェース

Gitのネイティブ環境はターミナルです。新機能はまずそこで登場し、コマンドラインでのみGitの全機能が完全に利用可能です。しかし、プレーンテキストがすべてのタスクに最適な選択肢というわけではありません。視覚的な表現が必要な場合もあれば、ポイント&クリックインターフェースの方がずっと快適だと感じるユーザーもいます。

異なるインターフェースは異なるワークフローに合わせて作られていることに注意することが重要です。一部のクライアントは、著者が効果的と考える特定の作業方法をサポートするために、Git機能のごく一部のみを公開しています。このように見ると、これらのツールはどれも他のツールより「優れている」とは言えず、単にそれぞれの意図された目的に適しているだけです。また、これらのグラフィカルクライアントができることで、コマンドラインクライアントができないことは何もないことにも注意してください。リポジトリを操作する際には、コマンドラインが依然として最も強力な機能と制御を提供する場所です。

gitkgit-gui

Gitをインストールすると、視覚ツールであるgitkgit-guiも入手できます。

gitkはグラフィカルな履歴ビューアです。git loggit grepの強力なGUIシェルだと考えてください。これは、過去に何が起こったかを見つけようとしているときや、プロジェクトの履歴を視覚化したいときに使用するツールです。

Gitkはコマンドラインから起動するのが最も簡単です。Gitリポジトリにcdして、次のように入力します

$ gitk [git log options]

Gitkは多くのコマンドラインオプションを受け入れますが、そのほとんどは基盤となるgit logアクションに渡されます。おそらく最も便利なオプションの1つは--allフラグで、これはgitkにHEADだけでなく任意の参照から到達可能なコミットを表示するように指示します。Gitkのインターフェースは次のようになります

The `gitk` history viewer
図177. gitkの履歴ビューア

上部にはgit log --graphの出力に少し似たものが表示されます。各点はコミットを表し、線は親子関係を表し、参照は色付きのボックスで示されます。黄色の点はHEADを表し、赤色の点はまだコミットになっていない変更を表します。下部には選択されたコミットのビューが表示されます。左側にはコメントとパッチ、右側には要約ビューがあります。その間には、履歴を検索するために使用されるコントロールのコレクションがあります。

一方、git-guiは主にコミットを作成するためのツールです。これもまた、コマンドラインから起動するのが最も簡単です

$ git gui

そして、それはこのようなものです

The `git-gui` commit tool
図178. git-guiのコミットツール

左側はインデックスです。ステージされていない変更が上部に、ステージされた変更が下部に表示されます。アイコンをクリックすることでファイル全体を2つの状態間で移動させるか、ファイル名をクリックして表示するファイルを選択できます。

右上には差分ビューがあり、現在選択されているファイルの変更が表示されます。この領域で右クリックすることで、個々のハンク(または個々の行)をステージできます。

右下はメッセージとアクション領域です。テキストボックスにメッセージを入力し、「コミット」をクリックすると、git commitと同様の操作が行われます。また、「Amend」ラジオボタンを選択することで最後のコミットを修正することもできます。これにより、「Staged Changes」領域が最後のコミットの内容で更新されます。その後、いくつかの変更をステージまたはアンステージし、コミットメッセージを変更して、再度「コミット」をクリックすることで、古いコミットを新しいコミットに置き換えることができます。

gitkgit-guiはタスク指向ツールの例です。それぞれが特定の目的(履歴の表示とコミットの作成)に合わせて調整されており、そのタスクに不要な機能は省略されています。

macOSおよびWindows用GitHub

GitHubは、ワークフロー指向のGitクライアントを2つ作成しました。1つはWindows用、もう1つはmacOS用です。これらのクライアントは、ワークフロー指向ツールの良い例です。Gitの機能のすべてを公開するのではなく、代わりに、連携してうまく機能する厳選されたよく使われる機能に焦点を当てています。これらは次のようになります

GitHub for macOS
図179. macOS用GitHub
GitHub for Windows
図180. Windows用GitHub

これらは見た目も動作も非常によく似ているため、この章では単一の製品として扱います。これらのツールの詳細な説明は行いませんが(それぞれ独自のドキュメントがあります)、主に時間を費やすことになる「変更」ビューを簡単に見ていきましょう。

  • 左側にはクライアントが追跡しているリポジトリのリストが表示されます。この領域の上部にある「+」アイコンをクリックすることで、リポジトリを追加できます(クローンまたはローカルでのアタッチのいずれか)。

  • 中央にはコミット入力領域があり、コミットメッセージを入力し、含めるファイルを選択できます。Windowsでは、コミット履歴がこのすぐ下に表示されます。macOSでは、別のタブに表示されます。

  • 右側には差分ビューがあり、作業ディレクトリで変更された内容、または選択されたコミットに含まれた変更が表示されます。

  • 最後に注目すべきは、右上にある「Sync」ボタンです。これはネットワーク経由で操作する主要な方法です。

これらのツールを使用するためにGitHubアカウントは必要ありません。GitHubのサービスと推奨ワークフローを強調するように設計されていますが、任意のリポジトリで問題なく動作し、任意のGitホストとネットワーク操作を実行できます。

インストール

WindowsおよびmacOS用GitHubはhttps://desktop.github.com/からダウンロードできます。アプリケーションが初めて実行されると、名前やメールアドレスの設定など、Gitの初回設定がすべてガイドされ、認証情報キャッシュやCRLF動作など、多くの一般的な設定オプションに対して適切なデフォルトが設定されます。

どちらも「常緑型(evergreen)」で、アプリケーションが開いている間にバックグラウンドで更新がダウンロードされ、インストールされます。これにより、Gitのバンドルバージョンも含まれているため、手動で再度更新する心配はほとんどありません。Windowsでは、クライアントにPosh-gitを搭載したPowerShellを起動するショートカットが含まれており、これについてはこの章の後半で詳しく説明します。

次のステップは、このツールに操作するリポジトリを渡すことです。クライアントは、GitHubでアクセスできるリポジトリのリストを表示し、それらをワンステップでクローンできます。既にローカルリポジトリがある場合は、そのディレクトリをFinderまたはWindows ExplorerからGitHubクライアントウィンドウにドラッグするだけで、左側のリポジトリリストに含まれます。

インストールと設定が完了すれば、GitHubクライアントを多くの一般的なGitタスクに使用できます。このツールの意図されたワークフローは、「GitHub Flow」と呼ばれることがあります。これについてはGitHub Flowで詳しく説明しますが、大まかな内容は、(a) ブランチにコミットすること、(b) リモートリポジトリとかなり定期的に同期すること、です。

ブランチ管理は、これら2つのツールが異なる領域の1つです。macOSでは、新しいブランチを作成するためのボタンがウィンドウの上部にあります

“Create Branch” button on macOS
図181. macOSの「Create Branch」ボタン

Windowsでは、ブランチ切り替えウィジェットに新しいブランチ名を入力することでこれを行います

Creating a branch on Windows
図182. Windowsでのブランチ作成

ブランチが作成されたら、新しいコミットを行うのは非常に簡単です。作業ディレクトリで変更を加え、GitHubクライアントウィンドウに切り替えると、変更されたファイルが表示されます。コミットメッセージを入力し、含めたいファイルを選択して、「コミット」ボタン(Ctrl+Enterまたは⌘+Enter)をクリックします。

ネットワーク経由で他のリポジトリとやり取りする主な方法は、「Sync」機能を通じて行われます。Gitの内部にはプッシュ、フェッチ、マージ、リベースのための個別の操作がありますが、GitHubクライアントはこれらすべてを1つの多段階機能にまとめます。Syncボタンをクリックすると次のようなことが起こります

  1. git pull --rebase。マージ競合のために失敗した場合、git pull --no-rebaseにフォールバックします。

  2. git push.

これはこのスタイルの作業で最も一般的なネットワークコマンドのシーケンスであるため、これらを1つのコマンドにまとめることで多くの時間を節約できます。

まとめ

これらのツールは、設計されたワークフローに非常に適しています。開発者も非開発者も数分以内にプロジェクトで共同作業を開始でき、この種のワークフローに最適な多くのプラクティスがツールに組み込まれています。ただし、あなたのワークフローが異なる場合や、ネットワーク操作の実行方法とタイミングをより細かく制御したい場合は、別のクライアントまたはコマンドラインを使用することをお勧めします。

その他のGUI

他にも多くのグラフィカルなGitクライアントがあり、それらは専門的な単一目的ツールから、Gitができることすべてを公開しようとするアプリまで多岐にわたります。公式のGitウェブサイトには、最も人気のあるクライアントの厳選されたリストがhttps://git.dokyumento.jp/downloads/guisにあります。より包括的なリストは、Git wikiサイトのhttps://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and,_tools.html#Graphical_Interfacesで入手できます。

scroll-to-top