2014年12月3日水曜日

Bitnamiわからん:SVN->GITへの移行


おにぎりケース。コンビニのは塩辛いのでヨメに作ってもらってます

以前、Amazon EC2 Linuxにインストールした環境で試した時には、アトラシアンさんの記事通り特に問題なく終わりました(ありがとうございました)。

で、今回、同僚さんから「どうもうまくいかない」と相談を受けました。聞いてみるとBitnami / GitLabとのこと。上に「問題なく終わった」と書きましたけど、その前には私も簡単さに惹かれてBitnamiを使っていて、その時は結局Migrationがうまく行かなくて諦めたんですよね。

ということで、今回、MacのParalles上でCentOSを走らせて、そこで同僚氏のSVNリポジトリを吸い上げて変換することに。

■うまく行った方法■

例によって先に成功した方法を書きます。

参考になった記事はこれ「git-svnでSVN→Gitへの移行をやってみたログ」。こちらの環境はCentOS、事前にGitは同僚氏と同じ19.0.0に、Svnは同僚氏より新しい17.x.xにしました。yum install gitで入ってた18.x.xがなかなか消えてくれなくて苦労したのはまた別の話。

作業用ディレクトリを作り、その中で記事の通り:

git svn clone -s --prefix=svn/ https://<サーバ>/<リポジトリ>/<プロジェクト>

ここでテストの時間を短縮しようと<プロジェクト>に "trunk"より下の階層を指定してみましたが、ダメでした。かなり時間がかかりましたが、作業用ディレクトリの下にリポジトリの複製が出来上がりました。もしエラーで途中で止まってしまう場合の注意は元記事に書いてあります(ここでは言及しません)。

続いて記事同様:

git branch -r

で、ブランチができていることを確認します。なお、git tagを使ってもタグは一個もできていません。次にブランチを移行します。記事に書いてあるスクリプトをそのままコピペして実行します。

# svn/trunk, svn/tags/*, svn/*@xxx を除いたリモートブランチを checkout
for BRANCH_NAME in $(git branch -r | grep -ve 'svn/tags\|svn/trunk\|.*@\d*' | sed -e 's:svn/::'); do
    git checkout -b "$BRANCH_NAME" "svn/$BRANCH_NAME"
done;

# この時点でループの最後のブランチになっているので一応 master に戻しておく
git checkout master

記事より引用)。

viなどで上記テキストを checkout.sh のような名前のファイルとし、chmod +x checkout.shで実行可能にしてから ./checkout.sh で実行します。

続いて記事と同様

git remote add origin YOUR_GIT_REPOS_URL
git push -u origin --all

なのですが、その前に自分のhomeでリモートリポジトリのための鍵ペアを作り、リモートリポジトリに送ってやらなければなりません。

cd ~/.ssh
ssh-keygen -t rsa -C "mail@address"

ssh-keygenを実行するとパスフレーズを効いてきますが、省略します。また、ここで指定するメールアドレスは、リモートリポジトリのアカウントに使っているものを使います。

そうすると id_rsa と id_rsa.pub という2つのファイルが出来ます。このうち、id_rsaは秘密鍵なのでそのまま大切にしまっておきます。id_rsa.pubは英数字などから構成されるテキストファイルですが、これをコピペして、GitHubやGitLabのアカウント情報のProfile / SSH Keysに登録してやります。

話は戻って、git remoteなんたらを実行してもすぐにプロンプトに戻って来ます。ここで焦ってはいけません(私はいつも「あ、失敗した?」って焦ってしまうorz)。続く git push が本体です。しばらくしたら、例によって記事に書いてある通りに「タグの移行」を実行して作業のために付けた /svn/ プリフィックスを取ります。記事のスクリプト

for TAG_NAME in $(git branch -r | grep -e 'svn/tags' | grep -ve '.*@\d*' | sed -e 's:svn/tags/::'); do
    git tag "$TAG_NAME" "svn/tags/$TAG_NAME"
done
記事より引用)。

を gittag.sh てな名前のテキストファイルにして実行権限を付けて(chmod +x gittag.sh)から実行(./gittag.sh)。最後に記事の通り:

git push origin --tags

これでリモートに終了後にリモートリポジトリを見るとめでたく移行が済んでいました。めでたしめでたし。

■失敗編■

当初、リモートのリソースが逼迫してたこともあって、

  1. ローカルにもSVN / GITを立てる。
  2. リモートのSVNからsvndumpしてローカルにコピーし、svnadmin load
  3. ローカルでSVNからGITに変換
  4. リモートGITにpush

…と思っていたのですが、何せデータが数十GBもあるためにdumpで挫折。

こんな面倒くさい方法を使ったのは、前回Bitnami環境でgit-svnがうまくいかなかったせいなのですが…念のため正攻法の git svn clone を試してみたら、動いてしまいました。

当たり前といえば当たり前なんですが…あつものに懲りてなますを吹くのはいけない、というお話でした。

■余談な失敗■

この記事冒頭のおにぎりケース、どこかに書いたけど「食洗機可」と書いてあることを確認して買ってきたのに、開けてみたらオカズとオニギリを仕切るゴムシートに「食洗機使わないでね♡」と書いてあった。詐欺だよな。でも梱包捨てちゃって返品できないし、ってんで外装だけ使ってます。おかず持っていくのも面倒くさいしね。

生協の味噌汁とご飯120gのヨメ製オニギリが最近の昼食、オヤツはソイ20g+Whey20gのプロテインっす。押忍。

0 件のコメント:

コメントを投稿