↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] 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の移行完了。

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索