あーかいぶすハイディフィニション

ここはもう更新しとらんのじゃ

svn リポジトリを git (gitlab) に移籍させる

FA宣言。

Subersion と git のユーザ対応表を作る

移行させる subversion リポジトリにコミットした事があるユーザと、移行先の git 上に居るユーザとの対応表を作ります。たとえ一人しか作業してなくてもこれは必要でち!ちなみに作業前にたまってる変更は皆適用してもらう方がいいでち。

移行したいプロジェクトのワーキングディレクトリへ、無ければチェックアウトしてくる。
[user@localhost ~]$ cd /Sites/ikenie
[user@localhost ikenie]$ svn update
ワーキングディレクトリ上で下記コマンドをそのまま叩くと、コミットユーザの一覧が取得できる
[user@localhost ~ikenie$ svn log --xml | grep "<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt

#こんな感じの内容の users.txt が出力される
---
user1 =
user2 = 
user3 =
---
ユーザの対応を書く

今回は svn: userX -> git: commiterX とします。書式は source_username = destination_username となります。

user1 = commiter1 <commiter1@git.example.com>
user2 = commiter2 <commiter2@git.example.com>
user3 = commiter3 <commiter3@git.example.com>

実際にコピーする

ここから実際に git コマンドを使って、ローカルにインポート元のファイルを用意し、その後に git リポジトリにぶち込みます。

コピー元を git コマンドでチェックアウトしてくる

一覧を作ったワーキングディレクトリの外でなんか作ります。

[user@localhost ikenie]$ cd /Sites/togit/
[user@localhost togit]$ git svn clone http://svn example.com/repos/ikenie --authors-file=/Sites/ikenie/users.txt --no-metadata -s ikenie

これで、git の管理ファイルが作られつつ、svn のツリーから合法的にファイルを取得出来ました。

タグとブランチの情報を持ち回れるようにする

そのままだとタグとブランチの情報をもっていけないらしいので、ちょいと一手間かけます。

[user@localhost togit]$ cd ikenie
[user@localhost ikenie]$ git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done
[user@localhost ikenie]$ git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done

これでおk。

git (gitlab) の master に向けて送り出す

git (使ってるなら gitlab の WebUI でもなんでもいいっすよ) に、インポートされるプロジェクトを作っておきます。とりあえずインポート元に名前を合わせて「ikenie」とします。ちなみにグループも ikenie としているので、.git を表すアレは ikenie/ikenit.git となりますね。
んで、今まで作業してた手元の /Sites/togit/ikenie ディレクトリの内容をリモートに送ります。

[user@localhost ikenie]$ pwd
/Sites/togit/ikenie
[user@localhost ikenie]$ git remote add origin git@git.example.com:ikenie/ikenie.git
[user@localhost ikenie]$ git push origin --all
[user@localhost ikenie]$ git push origin --tags

おしまい

git から clone してみるか、gitlab のプロジェクト UI ページから確認してみてください。過去のコミット履歴とかもちゃんと入ってるはずなので、Gitlab であればアクティビティのグラフとかも描画されるはずです。