永らく subversion を便利に使ってきたが、git ブームの波に逆らえなくなってきたので、git についてあれこれ調べている。とりあえずマニュアルを見てみる。
$ man git
で更なるドキュメントの紹介がずらずら出てくる。沢山ありすぎるなー。でもちゃんと普通のマニュアルがあるというのは subversion よりも好感が持てる。subversion の man ページはどうでも良い事しか書いてない。
準備
ローカルで使う
git(1) の指示に従い gittutorial(7) を流し読み。まずはともあれ git config で自分の名前を登録する。これをやると ~/.gitconfig に設定ファイルが作られる。
$ git config --global user.name "名前" $ git config --global user.email "メール@アドレス"
subversion と違う所は、subvesion は一度登録したファイルは自動的にコミットされるが、git の場合変更したファイルを毎回 svn add で指定するという事らしい。この git add, git ファイルでは無く内容を追いかけるとあるがどういう事だろう。ちょっと実験してみる。
$ mkdir mygit $ cd mygit $ echo hello > hello.txt $ git init $ git add . $ git commit -m 'initial check in' $ git show commit 276202d009e27789ba962defbc8154301c171bd2 Author: takashi <takashi@scissorhands.local> Date: Wed Nov 26 13:25:33 2008 -0800 second check in diff --git a/hello.txt b/hello.txt index ce01362..e019be0 100644 --- a/hello.txt +++ b/hello.txt @@ -1 +1 @@ -hello +second
つまり、commit した瞬間のファイルではなくて、add した瞬間のファイルが保存されるみたい。subversion に慣れた人は常に git commit -a して自動 add にしておいた方が安全かも知れない。
次に私の苦手なブランチの説明がある。subversion では、ブランチはただのディレクトリで、私はこれが気に入っていたのだが git ではブランチは特別らしい。ブランチのリストと作成は git branch、ブランチの移動は git checkout を使う。
$ git checkout test $ git branch master * test $ git checkout test $ git commit -a 'third commit'
この変更点を最初のブランチ (master) に反映させるには、master に移動してから git merge を行う。一時的に作ったブランチは git branch -d で削除出来る。マージせずに消したいときは -d の代わりに -D を使う。削除してもちゃんとマージされた test 内のログは残る。
$ git checkout master $ git merge test $ git branch -d test
最後に gitk を使いカッコイイ(?) GUI でログを確認する。ここまでローカルだけの使い方。レポジトリが要らないので RCS っぽいな。
共有
次に共有方法について。gittutorial(7) には、二つのディレクトリを同期して使う方法が簡単に書いてある。しかし、サーバ上で共有する場合や、ブランチの共有はどうなるのかが分かりにくいので確かめてみる。とりあえず先ほど作った mygit のクローンを作って変更を push してみる。
$ cd .. $ git clone mygit/ local $ cd local $ echo 'fix it' > hello.txt $ git commit -a -m 'very nice fix' $ git push $ cd ../mygit/ $ git checkout -f $ cat hello.txt fix it
で、ブランチを作る実験をしてみたのだが、どうやら git の場合、ブランチが使えるのはローカルだけで、共有したい時にブランチは使えないようだった。これでは全然使い物にならないな。