おにぎりケース。コンビニのは塩辛いのでヨメに作ってもらってます |
以前、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
(記事より引用)。
git push origin --tags
これでリモートに終了後にリモートリポジトリを見るとめでたく移行が済んでいました。めでたしめでたし。
■失敗編■
当初、リモートのリソースが逼迫してたこともあって、- ローカルにもSVN / GITを立てる。
- リモートのSVNからsvndumpしてローカルにコピーし、svnadmin load
- ローカルでSVNからGITに変換
- リモートGITにpush
…と思っていたのですが、何せデータが数十GBもあるためにdumpで挫折。
こんな面倒くさい方法を使ったのは、前回Bitnami環境でgit-svnがうまくいかなかったせいなのですが…念のため正攻法の git svn clone を試してみたら、動いてしまいました。
当たり前といえば当たり前なんですが…あつものに懲りてなますを吹くのはいけない、というお話でした。
■余談な失敗■
この記事冒頭のおにぎりケース、どこかに書いたけど「食洗機可」と書いてあることを確認して買ってきたのに、開けてみたらオカズとオニギリを仕切るゴムシートに「食洗機使わないでね♡」と書いてあった。詐欺だよな。でも梱包捨てちゃって返品できないし、ってんで外装だけ使ってます。おかず持っていくのも面倒くさいしね。生協の味噌汁とご飯120gのヨメ製オニギリが最近の昼食、オヤツはソイ20g+Whey20gのプロテインっす。押忍。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。