平衡点
2010/12/14
_ git で CVS と仲良くする方法
「CVS なんて○○だ!」と Linus センセイの様に断言できたら良いですが(いや, 断言してますが), かと言って布教にかけるコストがアレなので, 自分だけ Git で作業するために, git cvsimport/exportcommit を使っています. 某所よりリクエストがあったので, メモを残しておきます.
git cvsimport
cvs で管理されているリポジトリから, 手元に git clone するためには git cvsimport を使います. 初回に一度やれば良いのですが, 普通にやったら微妙に author とか変だったので, とりあえず authors.txt を作成しておきます.
$ cat authors.txt uwabami=Youhei SASAKI <uwabami@gfd-dennou.org> ...
そんでもって
$ git cvsimport \ -v \ -A authors.txt \ -d PATH_TO_CVSROOT \ -C MODULE_NAME \ GIT_REPOS_NAME
みたいに.
- PATH_TO_CVSROOT は :pserver: とか :ext とか.
- -A authors.txt は非推奨らしいですが, コレをやっておかないと git log のメールアドレス等が悲しくなります.
- MODULE_NAME は CVSROOT から取得したいモジュール名
- GIT_REPOS_NAME は作成したい git のリポジトリ名
CVS のリポジトリを置いてあるサーバで git と cvsps が動作しないと駄目です. 無ければ適当に install しておきましょう(もしくは管理者にお願いしましょう).
初回取得時は, コミット数に応じてそれなりに時間がかかります. Delta か DAG か, という違いです. 取得したら git gc しておくと良いでしょう. あとは普通に git リポジトリの様に作業します. 面倒なのは CVS の変更点の取得です. git pull/fetch, git svn rebase みたいにはできないみたいで, 毎度上記コマンドラインを叩く必要があります(Makefile でも書いておくと良いかな). 当然ながら, 既に取得した CVS のコミットを再度取得することは無いですが.
git cvsexportcommit
手元で作業した内容を, 御本尊の CVS リポジトリにコミットするには git cvsexportcommit を使います. しかしながら, 面倒なのは CVSROOT に直接コミットできないことですかね.
- cvs の working copy に git からコミット
- cvs で CVSROOT へコミット
という二段構成になります.
git cvsexportcommit \ -v \ -w PATH_TO_CVS_WORKING_COPY \ COMMIT_HASH
- PATH_TO_CVS_WORKING_COPY は cvs checkout した CVS の working copy
- COMMIT_HASH は git のコミットハッシュ値. 省略した場合は cvsimport した所から git の HEAD まで全て
です. うまくいったら, CVS の作業コピーで今迄通り cvs commit します.
感想
エラい面倒です. Git とは言いませんが, せめて Subversion に移行してくれませんか, とか((CVSROOT を rsync して手元にコピーしている, と聞いた時は憤死しそうになった. それなら Git で良いじゃんかヽ(`Д´)ノウワァァァン!!)).
以上, またもやくだらないお話しでした.