Git環境構築(に関するただの日記)

ソースコードバージョン管理システムというのは、ソフトウェアの開発現場にあって然るべきものだ。
今まで私が従事したほぼすべてのプロジェクトにおいて、CVSやらSVNやらMicrosoft Visual Sourcesafe(まだあるのかな?)などの環境は、すでに構築されており、チェックアウトやコミットの運用方法も、プロジェクトチームごとにきちんと取り決められていた。おかげで、日々のソースコードのバックアップ方法に悩まされることもなく、必要なときには、バージョン間の差分を知ることもできた。

言うまでもなく、それは『誰か』がCVSなりSVNの環境構築をして、運用方法を定めて、実際にチームがそれに従って動いていたということである。当然のように、その『誰か』の番は、いつか私にも回ってくるだろう。

というわけで、ちょっとだけGitの勉強をしてみた。

本来ならば、学んだ内容を忘れないようにここにメモしておく予定だったのだが、どうやらその必要はなさそうだ。というのも、Gitの公式ドキュメントの出来が非常に良い。

http://git-scm.com/book/ja

しかも日本語訳されている。少々おかしな日本語表現になっている箇所はあるが、必要であればいつでも原文を参照することができるのだ。日本語訳はないよりもあった方が断然ありがたい。このドキュメントには、バージョン管理システムの歴史や背景、Gitの内部の仕組みなどについても書かれているので、単純に読み物としても面白いし、順を追って進めれば、きちんとGitを使えるようになっている。それは公式チュートリアルとして当然のことと思うかもしれない。しかし、考えてもみたまえ。Struts2の公式ドキュメントを読んで、あれでStruts2をマスターできたという人がいったい何人いるのだろうか。あんなもの読んだって何もわからないじゃないか。

それに比べてGitのドキュメントは本当によくできている。感動した。まじで。

というわけで、私がGitについてここに書くことは何もない。必要なことは公式ドキュメントに書かれているのだから。

というのも、少しおおげさだし、残念でもあるので、ちょっとだけ、簡単な環境構築方法をまとめておくことにする。



<超簡単 Git 環境構築>

■前提
社内のローカルネットワークにGitサーバーを構築することとする。
社外にリポジトリを公開するようなことは想定しない。


■必要なもの
SSH接続できるファイルサーバーと開発機。


■サーバー構築
Gitサーバーとして使う機材には、SSH接続できる環境があればそれで良い。
そのサーバー上で、開発者のUNIXユーザーアカウントを管理し、/var/gitなどのリポジトリ管理用のディレクトリに開発者がアクセスできるようにパーミッション設定しておく。


■開発機にGitをインストールする
OSXの場合は、下記URLからインストーラーをダウンロードして実行するのが手っ取り早い。
http://code.google.com/p/git-osx-installer

各開発者は、Gitをインストール後、ユーザー名とメールアドレスを設定しておく。
この設定は、~/.gitconfigに格納される。

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

リポジトリの初期化と最初のコミット
まず、プロジェクトリーダーが、自分のローカルでプロジェクトの基準ディレクトリを作成する。

$ mkdir my_project

そして、GITリポジトリを作成する。

$ cd my_project
$ git init

必要であれば、この時点で初期ファイルをaddしてcommitしておく。

$ git add *
$ git commit -m 'First Commit'

プロジェクトの基準ディレクトリに.gitignoreファイルを作成しておく。
OSXであれば、以下2行くらいのファイル無視は設定しておいた方が良いだろう。

.DS_Store
*~

さて、この時点では、プロジェクトリーダーのPCにしかリポジトリが存在しない。


リポジトリをサーバーに保存する
プロジェクトリーダーは、ローカルで作成したリポジトリのベアリポジトリを作成する。

$ git clone --bare my_project my_project.git

そして、サーバー上にこのベアリポジトリをアップロードする。

$ scp -r my_project.git user@hostname:/var/git

アクセス権はSSHのユーザー認証と、Gitサーバー上でのUNIXファイルシステムパーミッションで対応する。

これで、プロジェクトメンバーがリポジトリに対して読み書きできる状態が整った。


■リモートからリポジトリをクローンする
各開発者は、自分の担当するプロジェクトのリポジトリにアクセスできる。
しかし、Gitの場合は、ほとんどすべてのことがローカルで行われるので、基本的には、リポジトリをローカルにクローンできてしまえば、後はGitのコマンドでどうにでもできる。

$ git clone user@hostname:/var/git/my_project

これでクローン完了。

プロジェクトの基準ディレクトリ以下の作業は自動的に追跡されるので、必要なときにステージに追加してcommitしてやればよい。そして、どこかのタイミングで、安定板をサーバーにpushしてやればよい。

Gitのコマンドについては、適宜調べて、別途、使い方をマスターする必要があるだろう。

ということで、環境構築は非常に簡単であった。
ただし、実際にチームで運用するには、これだけでは不十分であろう。
実際には、プロジェクトリーダーが運用方針を決めて、ブランチを切りながら作業を進めることになると思われる。

その辺については、以下のサイトが参考になりそうだ。


【参考】
・Git のブランチの仕組み(公式)
http://git-scm.com/book/ja/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD

・git の運用指針
http://d.hatena.ne.jp/tt_clown/20130412/git_management

・こわくない Git
http://www.slideshare.net/kotas/git-15276118

・Gitユーザーマニュアル
http://cdn8.atwikiimg.com/git_jp/pub/Documentation.ja/user-manual.html

・Git初心者が絶対に覚えておくべきコマンド
http://d.hatena.ne.jp/idesaku/20091106/1257507849