バージョン管理システムの導入
いつか導入してみようと思ってたけど, 先延ばしにしてたもの.
昨日 nanasi さんに使うべき!とコメントをもらったので, 良い機会だから導入してみた.
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 でやったこともメモしておこう.
$ 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 つのコマンドで事足りそう.
さて, CVS と subversion, どっちを使うべきか.
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 がどうたらって言われるんだよね.