おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

バージョン管理をsubversionからgitに移行してみた

kaeruspoon関連のソースコードはsubversionでバージョン管理していますが、ウワサのgitを使うことにしてみます。

参考: せっかちな人のためのgit入門

環境はubuntu8.04。まずはgitのインストール。

sudo aptitude install git-core  

gitはsubversionみたいにレポジトリがひとつではなく、あらゆる環境で分散して管理します。つまりローカルにもレポジトリが存在することになるので、ノートパソコンを持って飛行機の中でも電車の中でも開発ができるということ。subversionとsvkをくっつけたような感じですね。
とりあえず、ローカル環境でレポジトリを作ります。

cd ~/devel/kaeruspoon  
git init  

.gitというディレクトリが作られます。

ではkaeruspoonをコミットしてみよう。コミット前にsubversionの.svnディレクトリを削除しておきます。

find . -name .svn -exec rm -fr {} \;  

それからコミット。

git add .  

と、思ったら

*** Your name cannot be determined from your system services (gecos).  

Run  

  git config --global user.email "you@example.com"  
  git config --global user.name "Your Name"  

to set your account's default identity.  
Omit --global to set the identity only in this repository.  

fatal: empty ident  <tsukasa@blue  
.(none)> not allowed  

なにか怒られた。
どうもコミットする者の名前を登録しておく必要があるらしい。

git config --global user.email "tsukasa@example.com"  
git config --global user.name "tsukasa"  

気を取り直してコミット

git add .  
git commit -m "kaeruspoon commit"  

subversionと同様に、-mオプションをつけなければエディタが立ち上がってそこにコメントが書けます。
ぼくの環境ではデフォでnanoがエディタとして選択されたので、~/.zshrcに以下の行を追加してvimを使うように指定しておきました。

export GIT_EDITOR=vim  

それからサーバ上にリモートレポジトリを作ります。サーバの環境はdebianなんだけど、微妙にコマンドが違う。なんでだろう。

cd /var/git/kaeruspoon  
git init-db  

それからローカルに戻って、ローカルのレポジトリをリモートレポジトリに反映させます。

git remote add origin ssh://silver/var/git/kaeruspoon  
git push origin master 

このpushが、subversionでいうcommitみたいな感じ。
逆にpullコマンドでリモートレポジトリをローカルに反映させることができる。こちらは update か。

webサーバに、ローカルレポジトリを作って、リモートレポジトリの内容を反映させてみよう。

cd /var/www/rails/  
git init-db  
git clone ssh://silver/var/git/kaeruspoon  

これで環境構築は完了。

では開発・コミット・webサーバへの反映の一連の流れをやってみよう。
どこかのソースを修正したあとに

git status  

で状態の変化を確認し、

git diff  

で実際の変更箇所を確認できる。このあたりはsubversionと同様。
で、ローカルレポジトリへのコミット。

git commit -a  

コミットログは

git log  

で確認できます。
さて、リモートレポジトリへの反映。

git push origin master  

それからwebサーバ上で

git pull origin master  

これですべて完了です。