開発室ブログ

Git

Subversion(SVN)からGitへのリポジトリコンバート

「サヨナラSVN」感が強い昨今ですが、、、私たちのセクションではGitはオーセンティックなGitじゃなくて、Gitlab(Gitlab CE)をメインで使っています。

使用ツールとインストール

Gitlab CE

https://about.gitlab.com/downloads/

乱暴に言ってしまえば、Githubを自前サーバに立てる・・・と言った感じです(かなり語弊があるとは思いますが、Gitlabが主題ではないので堪忍してください)。 Rubyで動きます。

詳しい要件等は公式サイトにありますが、

# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# yum install gitlab-ce -y

CentOSの場合)
基本的にこれだけで、Ruby, PostgreSQL, Gitlab等の必要パッケージがインストールされます。

ユーザー管理、グループ管理、秘密鍵管理機能なんかもGUIで可能。
Rubyの非同期処理用モジュール、Sidekiqが本来の趣旨と相反してサーバのメモリを消費しまくる~といった問題点もありますが、バージョンアップの度に改善されている感じもします。
Githubの無料ユーザーだと、Privateなプロジェクトは1つしか作れませんが、GitlabCEなら当然無制限です。且つ、使い勝手も遜色ない、、、と思います。

svn2git

こちらもRubyのモジュールです。

convert -> pushの作業は、Gitlabをインストールしたサーバで行っても良いですし、別なサーバで行ってもOKです。 極論サーバでなくても、Macのターミナル操作でフツーに可能だと思います。
Rubyが既にインストールされている状態で、

# gem install svn2git

でインストール。

インストール出来たら、ユーザーディレクトリにSVNリポジトリをチェックアウトして、新しく作ったGitのリポジトリに「push」するだけ。 svn2gitコマンドで落とすときに既にGitフォーマットにコンバートされているって言うことですね。

$ mkdir tmp
$ cd tmp
$ svn2git http(s)://path.to/svn/repository --verbose --username {usename}:{password}
$ git remote add origin http(s)://{username}@path.to/git/repository.git
$ git push origin master
$ -> Type password:
$ ~

SVNもGitもhttp(s)でアクセスできる前提です。
SSH接続がパスワード認証OKなサーバであれば、SSHでも行けるのかもしれませんが、私たちはの内部的な「お約束」に反しますので、それは試してません。

所感

数年前に苦労して構築したSubversion(SVN)サーバは完全にお役御免となり、(時代の潮流に乗り)すっかりGit派になってしまいました~
プロジェクト毎の参加メンバーアカウント管理がとにかくラクになりました。

また、pushイベントをフックにして、WEBサーバに自動デプロイさせる~といったツールを作成し実際に運用も行っておりますが、それはまた別の機会にPostしたいと思います。

RecentPost