永らく 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 の場合、ブランチが使えるのはローカルだけで、共有したい時にブランチは使えないようだった。これでは全然使い物にならないな。