バージョン管理システムの導入

いつか導入してみようと思ってたけど, 先延ばしにしてたもの.
昨日 nanasi さんに使うべき!とコメントをもらったので, 良い機会だから導入してみた.



よくよく調べたら, RCS, CVS だけでなく, subversion も入ってた.
そういや, OmoiKondara 使うためには, subversion が必須なんじゃん.


subvesion を最初に使ってみたんだけど,
どうにも上手くいかない*1から,
昔学校で, 日本語版のマニュアル全部印刷した CVS を使ってみた.



ここを参考にやってみた.

まずは, リポジトリの作成から.
ホームディレクトリ以下に cvsroot ディレクトリを作成してみた.

$ mkdir ~/cvsroot
$ cvs -d /home/khiker/cvsroot init

.zshenv に以下を追加して, 「source ~/.zshenv」とする.

export CVSROOT=/usr/local/share/cvsroot

これでリポジトリの作成は終了でいいのかな?


次にモジュールを登録してみる.
~/temp/work/cvstest というディレクトリに適当にテキストファイルでも作ってやってみる.

$ cd temp/work/cvstest
$ echo HELLO, WORLD! > hello.txt
$ ls
hello.txt

このディレクトリ, cvstest をインポートする.
インポートするためには, インポート元のディレクトリに入って作業する必要があるとのこと.

$ cvs import -m "Module Import Test" cvstest khiker cvstest_1
N cvstest/hello.txt

No conflicts created by this import

よくわからんままこんなのやってみた.
-m 以下は, ログメッセージ. 必須みたい.
cvstest は, $CVSROOT 以下に cvstest というディレクトリを作るらしい.
khiker は, ベンダータグ. 調べてみたけどよく分からんかった. ソフトウェアの名前を付けるとか書いてあったけど, とりあえずユーザ名を入れといた.
cvstest_1 は, リリースタグ. start にしてるのが多かったけど, 参考にしたページが, こんな感じだったから, そのまま適用.



テスト用に, インポート元ディレクトリ名を一時変更して退避する, と.

$ cd ..
$ mv cvstest cvstest_bak

チェックアウトってのをやってみる.

$ pwd
/home/khiker/temp/work
$ cvs checkout cvstest
cvs checkout: Updating cvstest
U cvstest/hello.txt
$ ls
cvstest/ cvstest_bak/ ...
$ cd cvstest
CVS/  hello.txt
$ cat hello.txt
HELLO, WORLD!
$ ls CVS
Entries  Repository  Root

こんな感じで復活できた.


hello.txt の内容を編集して, それをコミットする.

$ echo HELLO, CVS WORLD! > hello.txt
$ cat hello.txt
HELLO, CVS WORLD!
$ cvs commit -m "Commit Test" hello.txt
/home/khiker/cvsroot/cvstest/hello.txt,v  <--  hello.txt
new revision: 1.2; previous revision: 1.1

-mオプションを指定しなかったらいきなり Emacs が起動してビックリした.
ぜったいやらなきゃいけないのね.
環境変数 CVSEDITOR で指定したエディタを起動するとのことで, とりあえず, vim にしといた.



とりあえず, これで使える?
以下, 超簡単にメモ.

# 新しくファイルを追加.
# このコマンドの後に commit する.
$ cvs add ファイル名
# 今作業中のファイルと最後にコミットしてものの比較
$ cvs diff ファイル名

けっこうたいへんそう.
まあ使ってく内に慣れるかな.


それで, Emacs からの使用.
これができればずいぶんと楽になる.
まずは, 昨日 nanasi さんにもらったコメントに書いてあったコマンドの意味から.

  • C-x v v 新しくコミット.
  • C-x v l ログの参照
  • C-x v = 前のバージョンとの diff をとる.
  • C-x v u 現在の変更を捨てて最後にコミットした状態に戻す

これで良いのかな?
ついでに他のコマンドもメモ.

  • C-x v i 新たにファイルを追加.
  • C-x v d ディレクトリに存在する登録済みのファイルを全て表示する.

ほかにもいろいろあるけど, とりあえずこんなもんで.
VC は, 比較的簡単に使えた.
あとは慣れかな.



あれっ?
今試したら subversion 使えた.
使えなかったのなんだったんだ?
まあいいや, 両方使ってみよう.

追記

subversion でやったこともメモしておこう.

$ pwd
/home/khiker
$ svnadmin create svnroot
$ ls svnroot
README.txt  conf/  dav/  db/  format  hooks/  locks/

それで, ~/temp/work/svntest ディレクトリを作ってさっきと同じことをやってみる.

$ pwd
/home/khiker/temp/work
$ mkdir svntest
$ echo HELLO, WORLD! > hello.txt
$ svn import -m "Module Import" ~/temp/work/svntest file:///home/khiker/svnroot/svntest
追加しています              /home/khiker/temp/work/svntest/hello.txt

リビジョン 1 をコミットしました。

この import の動作で怒られたのなんだったんだろう?
まあいいや. 次行こう, 次.

$ mv svntest svntest_bak
$ svn checkout file:///home/khiker/svnroot/svntest
A    svntest/hello.txt
リビジョン 1 をチェックアウトしました。
$ ls
svntest_bak/ svntest/  ...
$ cd svntest
$ ls
hello.txt
$ cat hello.txt
HELLO, WORLD!

ここからの作業は, 問題なく Emacs でできた
たしかに nanasi さんにしょうかいしてもらった 4 つのコマンドで事足りそう.



さて, CVSsubversion, どっちを使うべきか.
CVS の方が古くて, 最近は, subversion の方が主流. それでいいのかな.
だったら subversion ってことになりそうだけど.
とりあえず, subversion の日本語マニュアルの pdf を見つけたので, それを学校で印刷してこようかな.


まずは, 卒論の tex ファイルをこいつで管理してみよう.

さらに追記

色々いじってやっと使い方が分かってきた.
C-x v ~ で過去バージョンのファイルを見るのもいいかも.
C-x v l やって, C-x v = や C-u C-x v = でファイルの比較, と.
それでちゃんとしたプログラムなら動くモノ, tex ならちゃんと dvi ができるモノができたら C-x v vでコミットする, と.
うん. 便利だ.
ただ, svn mkdir とか svn ls とかやってて zsh で補完が効かないのがちょっとだけツライ.
まあやるの最初だけだし, それはいいか.
あとは, Emacs で全部できるし.



うーん. ごちゃごちゃしたエントリになっちゃったなあ. 反省.

*1:どうしても, ra_local がどうたらって言われるんだよね.