おのたく日記 YouTubeも始めました→
2010-08-07(Sat) soruceforce.jpのリポジトリをgitにする (まだ失敗) [長年日記]
■ [SourceForge][CVS][svn][git]soruceforce.jpのリポジトリをgitにする (まだ失敗)
sourceforge.jpで管理しているMail送信先確認プログラムは、現在CVSでソースリポジトリを管理しているけれど、最近の流行はCVSやSubversionのような集中型バージョン管理プログラムではなくて、gitのような分散型バージョン管理プログラムなので、Sourceforge.jpでも使えるGitでのソースリポジトリ管理に変える事にした。
まずはcvs2svn → git-svn によって変換しようとして失敗した例。
1. CVSリポジトリをローカルに持ってくる
$ rsync -avz rsync://cvs.sourceforge.jp/cvsroot/mdc .
2. 次にcvs2svnでSubversionのリポジトリに変換
% cvs2svn -s mdc-cvs2svn mdc
これでは、/trunk/BetaProject,/trunc/CSVROOT...なので、/BetaProject/trunkに変換
% svnadmin dump mdc-cvs2svn > dump
% perl -pi -e 's|Node-path: trunk/([^/\n]*)|Node-path: $1/trunk|' dump
CVSROOTはCVS用なので削除
% svndumpfilter exclude 'trunk/CVSROOT' < dump > dump2
きれいになったSubversionリポジトリを展開
% svnadmin create mdc-git
% mkdir tmp
% cd tmp
% svn co file://$HOME/mdc-svn
% cd mdc-svn
% svn mkdir BetaProject
% svn ci -m "new directories"
% cd ../..
% svnadmin load mdc-svn <dump2
svn mkdirしているのはフォルダーを作っておかないとdumpのloadに失敗するかららしいが、これをやっても失敗する…
ということで残念ながら…
3. とりあえずは、「/BetaProject/trunkに変換」はあきらめてcvs2svnのまま、git svn clone -sしてgitに取り込む。
しかし、うつくしいソースリポジトリが作れず失敗…
■ [SourceForge][CVS][git]git cvsimportでトライ
そんな事をしているうちに、「git cvsimport なんてコマンドが有る事をしったので、
$ git cvsimport -d $HOME/mdc -C mdc-git BetaProject
としたけど、結局/CVSROOTが入ってしまって、cvs2svn→git-svnと変わらず…
■ [SourceForge][CVS][git]完成! cvs2gitでsourceforge.jpのリポジトリをGitに移行
なんとかいらない/CVSROOTを消しながら良い方法は無いかと、/usr/share/doc/cvs2svn/examples/をあさっていて、cvs2gitコマンドか有ることを発見。これが一番良かったので、sourceforge.jpのソースリポジトリをCVSからGitに変更するにはこれを利用することにした。
1. CVSリポジトリをローカルに持ってくる
$ rsync -avz rsync://cvs.sourceforge.jp/cvsroot/mdc .
2. 次にcvs2gitでSubversionのリポジトリに変換
ここで、/CVSROOTが入らないように/BetaProjectとから取ってくるのと、一時的にdump fileを作るがそれを上手く展開するのがミソ
$ cvs2git --username="Takuya" --keep-cvsignore --blobfile=git-blob --dumpfile=git-dump mdc/BetaProject
$ mkdir mdc-git
$ cd mdc-git
$ git init --bare --shared
$ cat ../git-blob ../git-dump |git fast-import
3. コミットユーザとメールアドレスの変更
sourceforge.jpのCVSリポジトリはcommitしたユーザがsourceforge.jpのユーザ名になっているので、Gitらしく正しいユーザ名とメールアドレスを設定する。
$ git filter-branch --commit-filter '
ORG_EMAIL="takuya-o";
NEW_EMAIL="takuya@page.on-o.com";
NEW_NAME="Takuya";
if [ "$GIT_AUTHOR_EMAIL" = "$ORG_EMAIL" ]; then
GIT_AUTHOR_NAME="$NEW_NAME";
GIT_AUTHOR_EMAIL="$NEW_EMAIL";
GIT_COMMITTER_NAME="$NEW_NAME";
GIT_COMMITTER_EMAIL="$NEW_EMAIL";
git commit-tree "$@";
elif [ "$GIT_COMMITTER_EMAIL" = "$ORG_EMAIL" ]; then
GIT_AUTHOR_NAME="$NEW_NAME";
GIT_AUTHOR_EMAIL="$NEW_EMAIL";
GIT_COMMITTER_NAME="$NEW_NAME";
GIT_COMMITTER_EMAIL="$NEW_EMAIL";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
参照: Pro Git 6.4歴史の書き換え - メールアドレスの一括変更
4. sourceforge.jpのGitリポジトリにpush
まずはsourceforge.jpでGitリポジトリを使えるように「プロジェクトで利用するツールの選択」でGit機能を有効にして、「Git管理ページで、「新規Gitリポジトリを作成」で「BetaProject」リポジトリを作成してから、
$ git remote add sf takuya-o@git.sourceforge.jp:/gitroot/mdc/BetaProject master
$ git push sf master
として、sourceforge.jpのGitリポジトリに載せて、CVS→Gitの移行完了。
|