章 ▾ 第2版

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認証メカニズムが機能するはずです。

scroll-to-top