-
1. Gitを始めるにあたって
- 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 スマートHTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 サードパーティのホスティングオプション
- 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 Resetの解明
- 7.8 高度なマージ
- 7.9 Rerere
- 7.10 Gitを使ったデバッグ
- 7.11 サブモジュール
- 7.12 バンドル
- 7.13 置換
- 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 Visual Studio CodeでのGit
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMineでのGit
- A1.5 Sublime TextでのGit
- A1.6 BashでのGit
- A1.7 ZshでのGit
- A1.8 PowerShellでのGit
- A1.9 まとめ
-
A2. 付録B: アプリケーションへのGitの組み込み
- A2.1 コマンドラインGit
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
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 Plumbingコマンド
4.8 サーバー上のGit - GitLab
GitLab
GitWebはかなりシンプルです。モダンでフル機能のGitサーバーを探しているなら、代わりにインストールできるオープンソースソリューションがいくつかあります。GitLabは人気の高いものの一つなので、そのインストールと使用例を取り上げます。これはGitWebのオプションよりも難しく、より多くのメンテナンスが必要ですが、フル機能のオプションです。
インストール
GitLabはデータベースをバックエンドとするウェブアプリケーションであるため、そのインストールは他のGitサーバーよりも複雑です。幸いなことに、このプロセスは十分に文書化され、サポートされています。GitLabは、公式のOmnibus GitLabパッケージを介してサーバーにGitLabをインストールすることを強く推奨しています。
その他のインストールオプションは次のとおりです。
-
Kubernetesで使用するためのGitLab Helmチャート。
-
Dockerで使用するためのDocker化されたGitLabパッケージ。
-
ソースファイルから。
-
AWS、Google Cloud Platform、Azure、OpenShift、Digital Oceanなどのクラウドプロバイダー。
詳細については、GitLab Community Edition (CE) readmeをお読みください。
管理
GitLabの管理インターフェースはウェブ経由でアクセスします。ブラウザでGitLabがインストールされているホスト名またはIPアドレスにアクセスし、root
ユーザーとしてログインするだけです。パスワードはインストールタイプによって異なりますが、デフォルトでは、Omnibus GitLabは自動的にパスワードを生成し、少なくとも24時間/etc/gitlab/initial_root_password
に保存します。詳細についてはドキュメントを参照してください。ログイン後、右上メニューの「Admin area」アイコンをクリックします。
ユーザー
GitLabサーバーを使用するすべてのユーザーは、ユーザーアカウントを持っている必要があります。ユーザーアカウントは非常にシンプルで、主にログインデータに付随する個人情報を含みます。各ユーザーアカウントには**ネームスペース**があり、これはそのユーザーに属するプロジェクトの論理的なグループです。ユーザーjaneがprojectという名前のプロジェクトを持っていた場合、そのプロジェクトのURLはhttp://server/jane/project
になります。

ユーザーアカウントを削除するには2つの方法があります。「ブロック」することで、ユーザーがGitLabインスタンスにログインできなくなりますが、そのユーザーのネームスペース下のすべてのデータは保持され、そのユーザーのメールアドレスで署名されたコミットは引き続きそのプロファイルにリンクされます。
一方、「削除」すると、データベースとファイルシステムから完全に削除されます。そのネームスペース内のすべてのプロジェクトとデータが削除され、そのユーザーが所有するすべてのグループも削除されます。これは明らかに、より永続的で破壊的な操作であり、めったに必要ありません。
グループ
GitLabグループは、プロジェクトのコレクションと、ユーザーがそれらのプロジェクトにアクセスする方法に関するデータです。各グループにはプロジェクトネームスペースがあり(ユーザーと同様に)、trainingというグループがmaterialsというプロジェクトを持っている場合、そのURLはhttp://server/training/materials
になります。

各グループには複数のユーザーが関連付けられており、それぞれのユーザーはグループのプロジェクトとグループ自体に対する権限レベルを持っています。これらは「ゲスト」(課題とチャットのみ)から「オーナー」(グループ、そのメンバー、およびそのプロジェクトを完全に制御)まで多岐にわたります。権限の種類は多すぎてここにリストすることはできませんが、GitLabには管理画面に役立つリンクがあります。
プロジェクト
GitLabプロジェクトは、単一のGitリポジトリとほぼ一致します。すべてのプロジェクトは、ユーザーまたはグループのいずれかの単一のネームスペースに属します。プロジェクトがユーザーに属する場合、プロジェクトのオーナーは誰がプロジェクトにアクセスできるかを直接制御します。プロジェクトがグループに属する場合、グループのユーザーレベルの権限が適用されます。
すべてのプロジェクトには可視性レベルがあり、そのプロジェクトのページとリポジトリへの読み取りアクセスを制御します。プロジェクトが_プライベート_の場合、プロジェクトのオーナーは特定のユーザーに明示的にアクセスを許可する必要があります。_内部_プロジェクトは、ログインしているすべてのユーザーに表示され、_公開_プロジェクトは誰でも表示できます。これは、git fetch
アクセスと、そのプロジェクトのWeb UIへのアクセスの両方を制御することに注意してください。
フック
GitLabは、プロジェクトレベルとシステムレベルの両方でフックをサポートしています。いずれの場合も、関連するイベントが発生すると、GitLabサーバーはいくつかの説明的なJSONを含むHTTP POSTを実行します。これは、GitリポジトリとGitLabインスタンスを、CIサーバー、チャットルーム、デプロイツールなどの開発自動化の残りの部分に接続するのに最適な方法です。
基本的な使い方
GitLabで最初に行うことは、新しいプロジェクトを作成することです。これは、ツールバーの「+」アイコンをクリックすることで行えます。プロジェクト名、属するネームスペース、可視性レベルを尋ねられます。ここで指定するほとんどの項目は永続的なものではなく、後で設定インターフェースから変更できます。「プロジェクト作成」をクリックすれば完了です。
プロジェクトが存在したら、おそらくそれをローカルGitリポジトリと接続したいと思うでしょう。各プロジェクトはHTTPSまたはSSH経由でアクセスでき、どちらもGitリモートを設定するために使用できます。URLはプロジェクトのホームページの上部に表示されます。既存のローカルリポジトリの場合、このコマンドはホストされている場所にgitlab
という名前のリモートを作成します
$ git remote add gitlab https://server/namespace/project.git
リポジトリのローカルコピーがない場合は、これを行うだけです
$ git clone https://server/namespace/project.git
ウェブUIは、リポジトリ自体のいくつかの便利なビューへのアクセスを提供します。各プロジェクトのホームページには最近のアクティビティが表示され、上部のリンクからプロジェクトのファイルとコミットログのビューに移動できます。
共同作業
GitLabプロジェクトで共同作業を行う最も簡単な方法は、各ユーザーにGitリポジトリへの直接プッシュアクセスを与えることです。プロジェクト設定の「メンバー」セクションに移動し、新しいユーザーをアクセスレベルに関連付けることで、ユーザーをプロジェクトに追加できます(異なるアクセスレベルについてはグループで少し説明しています)。ユーザーに「開発者」以上のアクセスレベルを与えることで、そのユーザーはコミットやブランチを直接リポジトリにプッシュできます。
もう一つの、より分離された共同作業の方法は、マージリクエストを使用することです。この機能により、プロジェクトを見ることができるすべてのユーザーが、制御された方法でプロジェクトに貢献できます。直接アクセス権を持つユーザーは、単にブランチを作成し、そこにコミットをプッシュし、そのブランチからmaster
または他のブランチへのマージリクエストを開くことができます。リポジトリへのプッシュ権限を持たないユーザーは、リポジトリを「フォーク」して自身のコピーを作成し、_自身の_コピーにコミットをプッシュし、自身のフォークからメインプロジェクトへのマージリクエストを開くことができます。このモデルにより、所有者はリポジトリに何がいつ投入されるかを完全に制御できると同時に、信頼できないユーザーからの貢献も可能になります。
マージリクエストとイシューは、GitLabにおける長期的な議論の主要な単位です。各マージリクエストでは、提案された変更について行ごとに議論でき(軽量なコードレビューをサポートします)、全体的な議論スレッドも可能です。どちらもユーザーに割り当てたり、マイルストーンに整理したりできます。
このセクションは主にGitLabのGit関連機能に焦点を当てていますが、成熟したプロジェクトとして、プロジェクトwikiやシステムメンテナンスツールなど、チームの共同作業を支援する他の多くの機能も提供しています。GitLabの利点の一つは、サーバーがセットアップされ稼働し始めると、設定ファイルを微調整したり、SSH経由でサーバーにアクセスしたりする必要がほとんどなくなることです。ほとんどの管理と一般的な使用は、ブラウザ内のインターフェースを介して行うことができます。