ひげろぐ

技術者として仕事人としての思うところや覚え書きやらです
Home      Profile      Works     
2009-06-10

SubversionからGitに移行

実はちょっと前にしてました。
今ではすっかりGitしか使わなくなってます。

移行の理由は世間の流行に乗って、という部分もあるのだけど主な理由はクライアントソフトの不在。
MacでいいGUIのSVNクライアントがなくて結局コマンドラインで使っているので、そんだったらGitでいいじゃんといったノリで移行。

WindowsだとTortoiseSVNがかなりいい感じだけど、Macではそれに匹敵する物が見つからなかったのが理由。
svnXはMacでもイマイチなUIなソフトはあるんだなー、と言う残念さ教えてくれたし、SCPluginは後一歩だったけどやや機能的に物足りず使い続けるには至らなかった。
人に何かいい物ないかと聞いてもコマンドライン派が多かったような気がする。

でコマンドラインでも使い始めてみれば実のところそんなに不便はなかったのだが、ただignoreするファイルの設定がいちいちめんどくさくて死にそうだった。
(svn propsetとかコマンドラインでやるもんじゃねえって個人的に思いました)

Gitは以前から実験的に触ったことはあったので移行は割とスムーズに。
ただsvnとrevertの意味が違うのでそこだけちょっと戸惑ったくらい。

リポジトリの移行も簡単で

$ sudo port install git-core +svn

とかでgit-svn込みのGitを入れて

$ git svn clone svn://hoge_repos/hoge_project/trunk hoge_by_git

これをリポジトリサーバ上ににまんまコピーするなり–bareオプションを付けてcloneするなりして完了。
さくっと移行できてしまった。
詳しいところはぐぐればたくさん出てくるので詳細は割愛。

しかし使い始めてみると分散管理の必要がなくてもGitは使いやすい。

  • オフラインでも使える(やはり区切りごとにコミットできるのは精神衛生上よい)
  • サーバ上のマスターリポジトリに何かあっても手元のリポジトリをさくっとマスターにできる(これはひとり開発だからか)
  • (上に関連して).git/configをいじれば簡単に参照しているマスターを変更できる
  • ブランチ切ったりマージするのが簡単(まあブランチ切らないけど)
  • ignoreするファイルの設定が簡単(.gitignoreに書くだけでいい)
  • .svnファイルがディレクトリごとにできないので煩わしくなくていい
  • githubがある

ざっと思いつく限りでこんなかんじ。
サーバ上のリポジトリに縛られない軽快さが予想以上に良い。

あとはGUIのクライアントでいいものが出ればSubversionのアドバンテージはなくなってしまう気がするね。

2008-02-01

Subversionのリポジトリ移行

最近サービスのインフラをリニューアル中。
古いサーバをリプレースするんで新しいサーバにいろいろと移行中だったりします。

今日は開発に使っているSubversionのリポジトリをさくっと移行しました。
古いほうでバックアップして新しいほうでリストアするだけです。

バックアップ@旧サーバ

まず古いサーバにあるSubversionのリポジトリをバックアップ。

svnadmin dump /path/to/repos > backupfile

自分以外いじる人はいないのでhotcopyとかは特に考えず。

リストア@新サーバ

次に新しいサーバでリポジトリを作って、バックアップ内容をリストア。

svnadmin --fs-type fsfs create /path/to/newrepos
svnadmin load /path/to/newrepos < dumpfile

サーバを立ち上げて動作テスト。
ローカルからチェックアウトしてみたり、他のマシンからリポジトリの内容をブラウズしてみたり。

問題ないことを確認して完了。
簡単なもんですな。

2008/02/03追記

コミットしようとしたら認証を要求されてパスワードの設定忘れてたのに気がつきました。
ちなみにsvnserveで動かしてます。/path/to/repos/conf/svnserve.confを編集。

[general]
anon-access = none
auth-access = write

password-db = passwd
realm = brass repository

「anon-access = none」で認証されてないアクセスは一切認めず。
ちなみに「none」ではなく「read」を指定すると読み込みだけ可能になります。

「password-db」でパスワードファイル名を指定。
「realm」は認証の名前空間なので複数リポジトリを持っている場合はかぶらないようにしたほうがいいのだろうか?まあ複数リポジトリ持ってないので適当に設定。

次に/path/to/repos/conf/passwdを編集。

[users]
hogeuser = hogehoge

これで無事コミットもできるようになりました。

参考

copyright brass.to | powered by WordPress ME