-
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 Gitで元に戻す
- 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 リセットの解明
- 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 プレーンコマンドとハイレベルコマンド
- 10.2 Gitオブジェクト
- 10.3 Git参照
- 10.4 パックファイル
- 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 プレーンコマンド
4.2 サーバー上のGit - サーバー上でのGitの利用
サーバー上でのGitの利用
ここでは、これらのプロトコルを実行するGitサービスを自分のサーバー上に設定する方法を説明します。
注釈
|
ここではLinuxベースのサーバー上での基本的で簡略化されたインストールに必要なコマンドと手順を示しますが、macOSやWindowsサーバー上でこれらのサービスを実行することも可能です。実際にインフラストラクチャ内で本番サーバーをセットアップする際には、セキュリティ対策やオペレーティングシステムツールに違いが生じるでしょうが、ここでの説明が全体像を把握するのに役立つことを願っています。 |
任意のGitサーバーを最初にセットアップするには、既存のリポジトリを新しいベアリポジトリ(作業ディレクトリを含まないリポジトリ)としてエクスポートする必要があります。これは通常、簡単に行えます。新しいベアリポジトリを作成するためにリポジトリをクローンするには、--bare
オプションを付けてクローンコマンドを実行します。慣例として、ベアリポジトリのディレクトリ名は.git
というサフィックスで終わります。例えば、以下のようになります。
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
これで、Gitディレクトリのデータがmy_project.git
ディレクトリにコピーされているはずです。
これは、おおよそ以下のようなコマンドに相当します。
$ cp -Rf my_project/.git my_project.git
設定ファイルにはいくつかのわずかな違いがありますが、目的のためにはほぼ同じことです。これはGitリポジトリを作業ディレクトリなしで単独で取得し、それ専用のディレクトリを作成します。
ベアリポジトリをサーバーに置く
ベアリポジトリのコピーができたら、あとはそれをサーバーに置き、プロトコルを設定するだけです。SSHアクセスが可能なgit.example.com
というサーバーを設定し、すべてのGitリポジトリを/srv/git
ディレクトリの下に保存したいとしましょう。そのサーバーに/srv/git
が存在すると仮定すると、新しいリポジトリはベアリポジトリをコピーすることでセットアップできます。
$ scp -r my_project.git user@git.example.com:/srv/git
この時点で、そのサーバーの/srv/git
ディレクトリにSSHベースの読み取りアクセス権を持つ他のユーザーは、以下のコマンドを実行することでリポジトリをクローンできます。
$ git clone user@git.example.com:/srv/git/my_project.git
ユーザーがサーバーにSSH接続し、/srv/git/my_project.git
ディレクトリへの書き込みアクセス権を持っている場合、自動的にプッシュアクセスも可能になります。
git init
コマンドを--shared
オプション付きで実行すると、Gitはリポジトリに自動的にグループ書き込み権限を適切に追加します。このコマンドを実行しても、コミットや参照などが破棄されることはありません。
$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared
Gitリポジトリを取得し、ベアバージョンを作成し、自分と共同作業者がSSHアクセスできるサーバーに配置するのがいかに簡単かおわかりいただけたでしょう。これで、同じプロジェクトで共同作業する準備ができました。
重要なのは、これは文字通り、数人でアクセスできる有用なGitサーバーを運用するために必要なことのすべてであるということです。サーバーにSSH可能なアカウントを追加し、それらのすべてのユーザーが読み書きアクセスできる場所にベアリポジトリを置くだけです。これだけで準備完了です。他に何も必要ありません。
次のいくつかのセクションでは、より洗練されたセットアップに拡張する方法を説明します。これには、各ユーザーのアカウントを作成する必要がない方法、リポジトリへの公開読み取りアクセスの追加、ウェブUIのセットアップなどが含まれます。ただし、プライベートプロジェクトで数人と共同作業するだけであれば、必要なのはSSHサーバーとベアリポジトリだけだということを覚えておいてください。
小規模なセットアップ
小規模な組織や、組織内でGitを試している段階で、開発者が数人しかいない場合、セットアップはシンプルにすることができます。Gitサーバーの設定で最も複雑な側面のひとつはユーザー管理です。一部のリポジトリを特定のユーザーに対して読み取り専用にし、他のユーザーに対して読み書き可能にする場合、アクセスとパーミッションの調整は少し難しくなります。
SSHアクセス
すべての開発者がすでにSSHアクセス権を持っているサーバーがある場合、最初のレポジトリをそこにセットアップするのが一般的に最も簡単です。なぜなら、ほとんど何もする必要がないからです(前のセクションで説明した通りです)。レポジトリに対してより複雑なアクセス制御タイプのパーミッションが必要な場合は、サーバーのオペレーティングシステムの通常のファイルシステムパーミッションで処理できます。
書き込みアクセスを許可したいチームメンバー全員分のSSHアカウントがサーバーにない場合は、SSHアクセスを設定する必要があります。これを行うためのサーバーを持っている場合、SSHサーバーがすでにインストールされており、それによってサーバーにアクセスしていると仮定します。
チーム全員にアクセス権を付与する方法はいくつかあります。1つ目は、全員分の SSH アカウントを作成する方法で、これは簡単ですが手間がかかります。新規ユーザーごとに adduser
(または代替の useradd
) を実行し、一時パスワードを設定するのは避けたいかもしれません。
2番目の方法は、マシン上に単一の 'git' ユーザーアカウントを作成し、書き込みアクセス権を持つすべてのユーザーにSSH公開鍵を送ってもらい、その鍵を新しい 'git' アカウントの ~/.ssh/authorized_keys
ファイルに追加することです。この時点から、全員が 'git' アカウント経由でそのマシンにアクセスできるようになります。これはコミットデータには一切影響しません。接続元のSSHユーザーは、記録されたコミットには影響を与えません。
もう一つの方法は、SSHサーバーにLDAPサーバーや、すでに設定済みの他の集中認証ソースから認証させることです。各ユーザーがマシン上でシェルアクセスできる限り、考えられるあらゆるSSH認証メカニズムが機能するはずです。