Gitを触ってみるよ その3「集中管理型リポジトリの作成」

Gitは分散型のバージョン管理システムなので、Subversionみたいな集中型のリポジトリを作るよりは、各々がリポジトリを持ち合うような開発手法の方が真骨頂なんだとは思います。が…そうは言っても、集中型リポジトリでの管理をしたい場合も多いのではないかなと。

そんな訳で、今回は、Subversionみたいな集中管理型のリポジトリの作成をやってみたいと思います。

リモートリポジトリ作成方法の種類

リモートリポジトリを作成するには、大きく2つの方法があります。

  1. 既に存在するディレクトリを元にリポジトリを作る。
  2. 空のリポジトリを作る。

既に存在するディレクトリを元にリポジトリを作る

これは例えば、"今までFTPサーバにみんなでファイル送信してソース管理していたが、ボスが突然、「GitGitにしてやんよ」とか言い出して、Gitで管理する事になった"とか、"プロジェクトで共通で使っているライブラリとかフレームワークがあって、ある程度ファイルが揃っている状態でリポジトリ管理をスタートしたい"とか、そんな場面が考えられます。

集中管理型リポジトリを使うからには複数人での開発が前提になると思うので、ほとんどの場合はこちらになると思います。

では、実際にリモートリポジトリを作ってみましょう。ここでは、"/path/to/project"配下にプロジェクトのファイルがあるとします。

# su - projectuser
$ cd /path/to/project

ログディレクトリ等、Gitの管理外にしたいディレクトリがある場合は、そのディレクトリ配下に.gitignoreファイルを以下の内容で作成します。

*
!.gitignore

例えばRailsであれば、logとtmpディレクトリ配下に作っておくとよいと思います。

あとは、一旦ローカルリポジトリとしてプロジェクトのファイルをコミットして、それを元にリモートリポジトリとして登録します。

$ git init
$ git add .
$ git commit -m 'Initialize.'
$ su - git
% cd public
% git clone --bare /path/to/project NameOfProject.git

内容はプロジェクトに合わせて適宜読み替えて下さい。

新しくプロジェクトに参入した人は、以下のようにクライアントにソースをcloneして、開発を開始します。*1

$ git clone ssh://git@server/home/git/public/NameOfProject.git

空のリポジトリを作る

クライアント上で既にある程度開発を進めている場合や、完全にまっさらな状態からプロジェクトをスタートしたい場合は、サーバ上に空のリポジトリを作って開発を開始します。

こちらの方法は、個人での開発とかで、"PC上でちょこちょこ作っていたものがある程度カタチになってきたから、サーバ上での管理をしよう"とか、そんな場面での方法になると思います。

こちらは、空のリポジトリを作るだけなので非常に簡単です。

# su - git
% cd public
% mkdir NameOfProject.git
% cd NameOfProject.git
% git --bare init

なお、クライアント上で以下のようにリモートリポジトリを登録しておくと、リモートのURLをいちいち入力する必要がなくなるので、開発を進める時に楽になります。*2

$ git remote add origin ssh://git@server/home/git/pulic/NameOfProject.git

開発を進める

以上で、サーバ上にリモートリポジトリを準備する事ができました。あとは必要に応じてpush/pullを行いながら、開発を進めていきます。

push/pullは、以下のコマンドで行います。

$ git push origin master
$ git pull origin master

git cloneで開発を開始した場合は、リモートリポジトリの接続先情報が保存されているので、引数が不要になります。が、"何をどこにpush/pullする"というのを間違えないようにする為にも、いちいち指定する癖を付けておくのもいいかもしれませんね。

次回は?

という事で今回は、集中型のリモートリポジトリの作り方をお送りしました。次回は、分散型リポジトリについて書いてみようかなと思います。

*1:クライアントからリポジトリサーバに接続できる設定が、既にされている事を前提にしています。

*2:1の方法で、cloneでスタートした場合は、自動で登録されているので、この操作は不要です。