git によるバージョン管理の練習
シーブレインではソースコードなどのリソース管理に Subversion を使用しています。(バシャログの Subversion の検索結果)文字コードのトラブルも皆無で、 GUI のクライアントの TortoiseSVN の品質もよく、日々の業務に役立っています。
...という日頃の業務とは別のところで、別のバージョン管理システムも気になったりします。Mercurial, git, bazaar などなど。twitter などで話題を追っかけておりますと、 github.com というサイトが話題になっていたりします。(半年前くらいに...)そこで、今回は github.com 、ではなく、まずは git の使い方を調べたので、基本的な使い方についてまとめてご紹介します。Subversionを使用したことがあって、練習していただくとわかりやすいと思います。
git とは
プログラムのソースコードの変更履歴を管理できる、バージョン管理システムの1つです。Linux カーネルの開発で使われていることで知られています。
インストール
git でなにができるのか、具体的な手順を追って、確かめていきます。まず、git のインストールです。ここでは実際にインストールしてみた Windows/Debian/Mac OS X について取り上げます
- Windows - msysGit インストーラで一括インストール
- Windows 用のインストーラが提供されています。
- Debian GNU/Linux - apt-get で
- シェルで「sudo apt-get install git-core」とコマンドを実行します
- Mac OS X - MacPorts でインストールする方法
- MacPorts をインストールしていれば、シェルで「sudo port install git-core」でインストールできます。MacPorts 自体の解説は、MacPorts でステキなUNIXツールをインストール - はこべにっき#が大変参考になります。MacPorts をインストールしていない場合は多少の時間が必要になります。
最初の成果物を作る
さて、git で管理を始める前にコミットすべきファイルを作ります。完全な説明をするためにシェルを利用しますが、ここはGUIのエディタで作業しても問題ありません。以下の手順で試します。(Windows の場合は、スタートメニュー→全てのプログラム→ git → Git Bash を起動します)
- ディレクトリとファイルを作る
- リポジトリを作る
- コミットする
- 修正を加えてまたコミットする
ディレクトリとファイルを作る
~$ cd ~
~$ mkdir -p git/test # この test フォルダをあとで管理することになります
~$ cd git/test
~/git/test$ vim index.php # ファイルを編集する
~/git/test$ cat index.php
<?php
echo "こんにちは、git。今日は" . date("Y-m-d") ."\n";
?>
~/git/test$ php -a index.php
Interactive mode enabled
こんにちは、git。今日は2008-10-03
~/git/test$ vim README # 説明書を添える
~/git/test$ cat README
index.php はあいさつプログラムです。
~/git/test$ ls
README index.php
ここまでで何をしたのでしょうか。
- まず、プロジェクトの作業用フォルダを作りました。
- スクリプトを作成し、動作確認を行いました。
- スクリプトだけだと後々不安だな、と感じ、説明書を追加しました。
リポジトリを作る
適当なファイルができたのでリポジトリをつくります。現在のディレクトリで「git init」と実行してください。git の作業はプロンプトで行います。
~/git/test$ git init
Initialized empty Git repository in /home/tanaka/git/test/.git/
これでまっさらなリポジトリができました。リポジトリは現在の作業場所にできるんですね。( .git/ )
コミットする(リポジトリに成果物を送る)
~/git/test$ git add index.php README
git add はリポジトリで管理する対象を追加します。
~/git/test$ git commit -m 'first commit' #ログメッセージ
Created initial commit 0daf2b7: first commit
2 files changed, 4 insertions(+), 0 deletions(-)
create mode 100644 README
create mode 100644 index.php
コミットしました。ログをみてみます。
~/git/test$ git log
commit 0daf2b76a88ca753bcd27859a8105b7198fe6e43
Author: tanaka <tanaka@debian.lenny>
Date: Fri Oct 3 18:30:53 2008 +0900
first commit
修正を加えてまたコミットする
ちょっと修正して2回目のコミットをします。
~/git/test$ vim index.php
~/git/test$ cat index.php
<?php
echo "こんにちは、git。今日は" . date("Y-m-d") ."\n";
echo "Hello, git.\n";
?>
~/git/test$ git add index.php
~/git/test$ git commit -m 'second commit'
Created commit e9e9fd0: second commit
1 files changed, 1 insertions(+), 0 deletions(-)
ここで注意なのが、一度コミットした index.php をまた add してからコミットしたことです。ここで add したファイルだけが commit を実行したときに、実際にコミットされます。
git commit -a -m '....' という風に実行して楽することもできます。
まとめ
git のインストールから小さな練習用のプロジェクトの作成までを見てきました。Subversion と大きく違うのは、リポジトリがそばにあるということです。このために日常の作業に違いがあります。(コミット前の変更を元にもどすには、revert ではなく checkout でできる、など)
git を使うと、Subversion もそうですが、変更の追跡ができます。要所で git diff, git status, git log などのコマンドを使うと、変更を確認しながら作業することができます。
参考文献
- はじめてのgit | IDEA*IDEA
- こちらの練習手順が、非常に参考になりました。