Git
章 ▾ 第2版

4.2 サーバー上の Git - サーバーへの Git の導入

サーバーへの Git の導入

ここでは、独自のサーバーでこれらのプロトコルを実行する Git サービスのセットアップについて説明します。

注記

ここでは、Linuxベースのサーバーで基本的な簡略化されたインストールを行うために必要なコマンドと手順を実演しますが、macOSやWindowsサーバーでもこれらのサービスを実行できます。インフラストラクチャ内に本番サーバーを実際にセットアップするには、セキュリティ対策やオペレーティングシステムのツールに違いが生じることは間違いありませんが、これによって、何が関わってくるのかについて一般的な考えが得られることを願っています。

最初にGitサーバーをセットアップするには、既存のリポジトリを新しいベアリポジトリ(作業ディレクトリを含まないリポジトリ)にエクスポートする必要があります。これは一般的に簡単です。リポジトリをクローンして新しいベアリポジトリを作成するには、--bareオプションを指定してcloneコマンドを実行します。慣例により、ベアリポジトリのディレクトリ名には、次のように.gitの接尾辞が付きます。

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

これで、my_project.gitディレクトリに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接続可能なアカウントを追加し、すべてのユーザーが読み取りおよび書き込みアクセスできる場所にベアリポジトリを配置するだけです。準備完了です。他には何も必要ありません。

次のいくつかのセクションでは、より高度なセットアップに拡張する方法を見ていきます。この説明には、ユーザーごとにユーザーアカウントを作成する必要がないようにすること、リポジトリへのパブリック読み取りアクセスを追加すること、Web UIなどを設定することが含まれます。ただし、プライベートプロジェクトで数人と共同作業を行うためには、必要なのはSSHサーバーとベアリポジトリだけであることを覚えておいてください。

小規模なセットアップ

あなたが小規模な組織であるか、組織でGitを試しているだけで、開発者が少数しかいない場合は、物事はシンプルになります。Gitサーバーのセットアップで最も複雑な側面の1つは、ユーザー管理です。一部のリポジトリを特定のユーザーに対して読み取り専用にし、他のユーザーに対して読み取り/書き込みにしたい場合、アクセスと権限を調整するのが少し難しくなる可能性があります。

SSHアクセス

すべての開発者がすでにSSHアクセスを持っているサーバーがある場合、最初のレポジトリをそこにセットアップするのが一般的に最も簡単です。なぜなら(前のセクションで説明したように)ほとんど何もする必要がないからです。リポジトリに対するより複雑なアクセス制御タイプの権限が必要な場合は、サーバーのオペレーティングシステムの通常のファイルシステム権限でそれらを処理できます。

チームの全員に書き込みアクセスを許可したいアカウントがないサーバーにリポジトリを配置する場合は、それらのユーザーのためにSSHアクセスを設定する必要があります。これを行うためのサーバーがある場合は、すでにSSHサーバーがインストールされており、それを使ってサーバーにアクセスしているものとします。

チームの全員にアクセス権を与えるにはいくつかの方法があります。1つ目は、全員のアカウントを設定することです。これは簡単ですが、面倒な場合があります。adduser(または可能な代替手段のuseradd)を実行して、新しいユーザーごとに一時的なパスワードを設定する必要がある場合があります。

2番目の方法は、マシン上に単一の「git」ユーザーアカウントを作成し、書き込みアクセス権を持つすべてのユーザーにSSH公開鍵を送信してもらい、その鍵を新しい「git」アカウントの~/.ssh/authorized_keysファイルに追加することです。その時点で、誰もが「git」アカウントを介してそのマシンにアクセスできるようになります。これは、コミットデータには影響しません。接続したSSHユーザーは、記録したコミットには影響しません。

別の方法は、SSHサーバーをLDAPサーバーや、すでにセットアップしている可能性のある他の中央認証ソースから認証させることです。各ユーザーがマシンへのシェルアクセスを取得できる限り、考えられるあらゆるSSH認証メカニズムが機能するはずです。

scroll-to-top