-
1. 使い始める
- 1.1 バージョン管理に関して
- 1.2 Git略史
- 1.3 Gitの基本
- 1.4 コマンドライン
- 1.5 Gitのインストール
- 1.6 最初のGitの構成
- 1.7 ヘルプを見る
- 1.8 まとめ
-
2. Git の基本
- 2.1 Git リポジトリの取得
- 2.2 変更内容のリポジトリへの記録
- 2.3 コミット履歴の閲覧
- 2.4 作業のやり直し
- 2.5 リモートでの作業
- 2.6 タグ
- 2.7 Git エイリアス
- 2.8 まとめ
-
3. Git のブランチ機能
- 3.1 ブランチとは
- 3.2 ブランチとマージの基本
- 3.3 ブランチの管理
- 3.4 ブランチでの作業の流れ
- 3.5 リモートブランチ
- 3.6 リベース
- 3.7 まとめ
-
4. Gitサーバー
- 4.1 プロトコル
- 4.2 サーバー用の Git の取得
- 4.3 SSH 公開鍵の作成
- 4.4 サーバーのセットアップ
- 4.5 Git デーモン
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 サードパーティによる Git ホスティング
- 4.10 まとめ
-
5. Git での分散作業
- 5.1 分散作業の流れ
- 5.2 プロジェクトへの貢献
- 5.3 プロジェクトの運営
- 5.4 まとめ
-
6. GitHub
- 6.1 アカウントの準備と設定
- 6.2 プロジェクトへの貢献
- 6.3 プロジェクトのメンテナンス
- 6.4 組織の管理
- 6.5 スクリプトによる GitHub の操作
- 6.6 まとめ
-
7. Git のさまざまなツール
- 7.1 リビジョンの選択
- 7.2 対話的なステージング
- 7.3 作業の隠しかたと消しかた
- 7.4 作業内容への署名
- 7.5 検索
- 7.6 歴史の書き換え
- 7.7 リセットコマンド詳説
- 7.8 高度なマージ手法
- 7.9 Rerere
- 7.10 Git によるデバッグ
- 7.11 サブモジュール
- 7.12 バンドルファイルの作成
- 7.13 Git オブジェクトの置き換え
- 7.14 認証情報の保存
- 7.15 まとめ
-
8. Git のカスタマイズ
- 8.1 Git の設定
- 8.2 Git の属性
- 8.3 Git フック
- 8.4 Git ポリシーの実施例
- 8.5 まとめ
-
9. Gitとその他のシステムの連携
- 9.1 Git をクライアントとして使用する
- 9.2 Git へ移行する
- 9.3 まとめ
-
10. Gitの内側
- 10.1 配管(Plumbing)と磁器(Porcelain)
- 10.2 Gitオブジェクト
- 10.3 Gitの参照
- 10.4 Packfile
- 10.5 Refspec
- 10.6 転送プロトコル
- 10.7 メンテナンスとデータリカバリ
- 10.8 環境変数
- 10.9 まとめ
-
A1. 付録 A: その他の環境でのGit
- A1.1 グラフィカルインタフェース
- A1.2 Visual StudioでGitを使う
- A1.3 EclipseでGitを使う
- A1.4 BashでGitを使う
- A1.5 ZshでGitを使う
- A1.6 PowershellでGitを使う
- A1.7 まとめ
-
A2. 付録 B: Gitをあなたのアプリケーションに組み込む
- A2.1 Gitのコマンドラインツールを使う方法
- A2.2 Libgit2を使う方法
- A2.3 JGit
-
A3. 付録 C: Gitのコマンド
- A3.1 セットアップと設定
- A3.2 プロジェクトの取得と作成
- A3.3 基本的なスナップショット
- A3.4 ブランチとマージ
- A3.5 プロジェクトの共有とアップデート
- A3.6 検査と比較
- A3.7 デバッグ
- A3.8 パッチの適用
- A3.9 メール
- A3.10 外部システム
- A3.11 システム管理
- A3.12 配管コマンド
A1.1 付録 A: その他の環境でのGit - グラフィカルインタフェース
これまでの内容を通して、コマンドラインからGitを使用する方法について多くのことを学んできました。 ローカルファイルに対して作業したり、ネットワークを介して他のリポジトリへ接続したり、他の人と効率的に作業したりできるようになったと思います。 しかし、話はそこで終わりません。Gitは通常、より大きなエコシステムの一部として使用されます。端末からの利用が常に最適解というわけではありません。 ここでは、端末以外でGitを活用できる環境の例や、そこで他の(あるいは、あなたの)アプリケーションがどのようにGitと協調動作するかを見ていきます。
グラフィカルインタフェース
Gitは端末をネイティブ環境としています。 Gitの新機能は、まずコマンドラインから利用可能になります。また、Gitのパワーの全てを完全に思い通りに使えるのもコマンドラインからだけです。 しかし、すべてのタスクにおいてプレーンテキストが最良の選択というわけではありません。時には視覚的な表現も必要でしょうし、ポイント&クリック方式のインタフェースの方が好みというユーザもいるでしょう。
なお、それぞれのインタフェースはそれぞれ別のワークフローに合わせて調整されているということには注意が必要です。 クライアントによっては、クライアントの作者が効率的だと考えている特定の作業手順をサポートするため、Gitの機能の中から選び抜かれた一部の機能だけを利用可能としている場合もあります。 この観点から見た場合、あるツールが他のツールと比べて “よい” よいうことはありません。各ツールは自身が想定している目的により適合している、というだけです。 また、これらグラフィカルクライアントでは可能で、コマンドラインクライアントでは不可能な処理、というものはありませんので注意してください。リポジトリに対して作業をする場合、コマンドラインが最もパワフルであることに変わりはありません。
gitk
と git-gui
Gitをインストールすると、ビジュアルツール gitk
および git-gui
が使えるようになります。
gitk
はグラフィカルな歴史ビューアです。
git log
や git grep
をパワフルなGUIシェルから使えるようにしたようなものだと思ってください。
これは、過去に何が起こったかを検索したり、プロジェクトの歴史を視覚化しようとしているときに使うツールです。
Gitkはコマンドラインから呼び出すのが一番簡単です。
Gitのリポジトリに cd
して、以下のようにタイプしてください。
$ gitk [git logのオプション]
Gitkには多くのコマンドラインオプションがありますが、その多くはGitkの背後にいる git log
アクションに渡されます。
おそらく、最も便利なオプションの一つは --all
フラグでしょう。これはgitkに対し、HEADだけではなく 任意の 参照から到達可能なコミットを表示させるものです。
Gitkのインターフェイスは次のようになっています。
![`gitk`の歴史ビューアー](png/gitk.png)
上部には git log --graph
の出力に似た内容が表示されます。各ドットはコミットを、線は親子関係を表しており、参照は色付きの箱として表示されます。
黄色の点はHEADを、赤い点はまだコミットになっていない変更を表しています。
下部には、選択されているコミットの内容が表示されます。コメントやパッチが左側に、概要が右側に表示されます。
真ん中にあるのは歴史の検索に使用するコントロール類です。
一方、 git-gui
は主にコミットを作成するためのツールです。
これも、コマンドラインから起動するのが最も簡単です。
$ git gui
表示内容は次のようになっています。
![`git-gui` のコミットツール](png/git-gui.png)
git-gui
のコミットツール左側はインデックスです。ステージされていない変更が上に、ステージされた変更が下に表示されます。 アイコンをクリックすると、各ファイルを2つの状態の間で行き来したり、ファイル名をクリックすることで表示するファイルを選択したりできます。
右上に表示されているのは diff で、現在選択されているファイルの変化を示しています。 この領域を右クリックすることで、個々のhunk(または個々の行)をステージングできます。
右下はメッセージとアクションの領域です。テキストボックスにメッセージを入力し、 “Commit” をクリックすれば、 git commit
と同じようなことができます。
また、 “Amend” ラジオボタンを選択すると、 “Staged Changes” 領域に最後のコミットの内容が表示されるので、そのコミットを修正することもできます。
変更をステージしたり、ステージを取り消したり、コミットメッセージを変更したりしたら、 “Commit” を再度クリックすれば古いコミットが新しい内容で更新されます。
gitk
と git-gui
はタスク指向のツールの例です。
特定の目的(それぞれ、履歴の表示と、コミットの作成)に合わせて調整されており、そのタスクに不要な機能は省略されています。
MacとWindows用のGitHubクライアント
GitHubは、ワークフロー指向のGitクライアントを公開しています。Windows用クライアントと、Mac用クライアントがあります。 これらのクライアントは、ワークフロー指向のツールの良い例です。Gitの機能の すべて を公開するのではなく、よく使われる機能の中から一緒に使うと便利な機能を選択し、それにフォーカスしています。 表示内容は次のようになっています。
![GitHubのMac用クライアント](png/github_mac.png)
![GitHubのWindows用クライアント](png/github_win.png)
この2つは見た目や動作が似たような感じで設計されているので、この章ではひとつの製品として扱うことにします。 ここではツールの詳細な説明はしません(GitHubクライアントの自前のドキュメントがあります)が、 “changes” ビュー(ツールの実行時間の大半はここを使うことになると思います)の内容をざっと見ていきましょう。
-
左側には、クライアントが追跡しているリポジトリのリストが表示されます。この領域の一番上の ‘`+ '’ アイコンをクリックすると、(ローカルでクローンするかアタッチするかして)リポジトリを追加できます。
-
真ん中はコミット入力領域です。コミットメッセージを入力したり、コミットに含めるファイルを選択したりできます。 (Windowsでは、コミットの歴史は、この下に直接表示されます。Macの場合は、別のタブに表示されます。)
-
右側はdiffビューです。作業ディレクトリの変更内容、または、選択しているコミットに含まれている内容が表示されます。
-
最後に、右上の “Sync” ボタンは、ネットワーク経由で対話を行う主要な手段です。
注記
|
これらのツールの使用にあたり、GitHubのアカウントは必要ありません。 これらのツールはGitHubのサービスや推奨ワークフローをハイライトするために設計されたものですが、どんなリポジトリに対しても正しく動作しますし、どんなGitのホストに対してもネットワーク操作が行えます。 |
インストール
Windows用のGitHubクライアントは https://windows.github.com から、Mac用のGitHubクライアントは https://mac.github.com からダウンロードできます。 クライアントを初めて実行する際には、名前やメールアドレスの設定といったGitの初期設定がひと通り行われます。また、認証情報のキャッシュやCRLFの挙動といった、一般的なオプション設定に対して、デフォルト値が設定されます。
これらのツールはいずれも “新鮮” な状態に保たれます。つまり、アプリケーションのアップデートは、アプリケーションの実行中にバックグラウンドで自動的にダウンロードされ、インストールされます。 このアップデートには、ツールに同梱されているGitも含まれています。そのため、Gitを手動で更新する心配をする必要はおそらくないと思います。 Windowsの場合、PowerShellをPosh-gitと一緒に起動するショートカットがクライアントに同梱されています。これについてはこの章の後半で詳しく説明します。
次のステップでは、ツールに操作対象のリポジトリを設定します。 クライアントには、GitHubであなたがアクセスできるリポジトリの一覧が表示されます。クローンの作成は1ステップで行えます。 既にローカルリポジトリがある場合は、GitHubのクライアントウインドウにFinderまたはWindowsエクスプローラからそのディレクトリをドラッグすれば、クライアント左側のリポジトリのリストに追加されます。
推奨ワークフロー
インストールと設定が完了したら、GitHubクライアントを使って一般的なGitのタスクの多くが行えます。 このツールで想定されているワークフローは “GitHub Flow” とも呼ばれています。 この詳細は GitHub Flow で取り上げます。要点としては、(a)コミットはブランチに対して行う、(b)定期的にリモートリポジトリと同期する、といった点があります。
ブランチ管理は、2つのツールで操作が異なる点の一つです。 Mac用クライアントでは、新しいブランチを作成するためのボタンがウィンドウ上部にあります。
![Mac用クライアントの ``Create Branch'' ボタン](png/branch_widget_mac.png)
Windows用クライアントでは、ブランチ切り替えのウィジェットで新しいブランチ名を入力すると、新しいブランチが作成されます。
![Windows用クライアントでブランチを作成する](png/branch_widget_win.png)
ブランチの作成が終われば、コミットの新規作成は非常に簡単です。 作業ディレクトリで変更を行った後、GitHubクライアントのウィンドウに切り替えると、どのファイルが変更されたか表示されます。 コミットに含めたいファイルを選択し、コミットメッセージを入力したら、 “Commit” ボタンをクリックします(またはCtrl-Enterか、⌘-Enterを押下します)。
ネットワーク経由で他のリポジトリとの対話するには、主に “Sync” 機能を使用します。 Gitは内部的に、プッシュ、フェッチ、マージ、およびリベースを別々の操作としていますが、GitHubクライアントではこれら一連の処理を1つの機能で実行できるようになっています。 “Sync” ボタンをクリックすると以下の処理が実行されます。
-
git pull --rebase
を実行します。 マージが衝突してこのコマンドが失敗したら、代わりにgit pull --no-rebase
にフォールバックします。 -
git push
を実行します。
これは、このスタイルで作業するときに最もよく実行されるネットワークコマンドのシーケンスなので、これを1つのコマンドにまとめることで、多くの時間を節約できます。
まとめ
これらのツールは、その前提となっているワークフローに合わせて最適化されています。 開発者と非開発者が一つのプロジェクト上で共同作業を行う際に、双方がすぐに同じように作業を行えるようになっていますし、この種のワークフローにおける多くのベストプラクティスがツールに埋め込まれています。 しかし、あなたのワークフローがその前提と異なっている場合や、ネットワーク操作をいつどのように行うかをより細かく制御したい場合には、別のクライアントを使うか、またはコマンドラインからGitを使用することをお勧めします。
その他のGUI
グラフィカルなGitクライアントは他にもあり、一つの目的に特化したツールから、Gitのできることは全て操作可能にしようとしているアプリケーションまで多岐に渡ります。 Gitのオフィシャルウェブサイトには、よく使われているクライアントのリストがあります。詳しくは http://git-scm.com/downloads/guis を参照してください。 また、より包括的なリストは Git wiki のサイトに掲載されています。詳しくは https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces を参照してください。