平衡点


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 で良いじゃんかヽ(`Д´)ノウワァァァン!!)).

以上, またもやくだらないお話しでした.


連絡先など
最近の日記
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|
Back to Top ▲