Rewish

SubversionのリポジトリをGitで扱う

svnコマンドはログが見づらいし、コミットしたらリモートにソッコーで飛んで行くし、Gitに慣れた僕には凄く扱いづらい。てことでgit-svnネタです。

一年くらい前からずっと下書き状態だったのを思い出したので公開。他にもコレ系の記事は沢山あるけど自分用のメモとして。ね。

svnリポジトリからチェックアウト

いつものcloneコマンドにsvnを付けるだけ。

git svn clone -s http://svn.example.com/Project_Name/

-sオプションを付けると、svnリポジトリが trunkbranchestags のような、お馴染みの構造だよって言うのをgitに教えられる。教えておくと、ブランチやタグがgitのリモートブランチとして扱えるようになるので便利。

また、 trunkbranchestags の名称が一般的なモノとは異なる場合は、

git svn clone http://svn.example.com/Project_Name/ -T trunkの名前 -b branchesの名前 -t tagsの名前

のように、-T、-b、-tオプションを付ければOK。

コードを書く

ファイルの追加や、ローカルへのコミットはいつものgitコマンドが使える。

git add .
git commit -m "first commit"

ローカルブランチも切り放題。

git branch ticket1
git checkout ticket1

や、

git checkout -b ticket1

など。

svnリポジトリにコミット

git pushのような勢いで。

git svn dcommit

svnリポジトリの更新を取り込む

svn updateのようなノリで。

git svn rebase

ノリとか関係無いしって場合はfetchしてからmergeする。

git svn fetch
git merge trunk

確認してからmergeできるので、こちらの方が安全かな。

svnリポジトリにタグやブランチを作成

タグ、ブランチ共に、いつものコマンドにsvnを付けるだけ。

git svn tag v0.1
git svn branch v1.0

svn:ignoreを取り込む

無視するファイルの設定をgitに取り込むには、git svn show-ignoreの結果を.git/info/excludeに書き込むのが楽。

git svn show-ignore >> .git/info/exclude

また、下記のコマンドを使えば自動で.gitignoreが作成される。svnリポジトリに.gitignoreは似合わないな、って場合は上記の方法でやるのが良さそう。

git svn create-ignore

認証情報

認証情報は ~/.subversion/auth/svn.simple/ 内のファイルに保存されている。デフォルトの設定ではパスワードも平分で保存されるので、~/.subversion/configを書き換えてパスワードを保存しないようにする。

vi ~/.subversion/config
[auth]
store-passwords = no

設定が終ったら~/.subversion/auth/svn.simple/内の該当ファイルを手動で削除する。

認証時に毎回パスワード打たないとダメだけど、パスワードが平文で保存される気持ち悪さに比べたらまだマシかな。

属性設定

git-svnからは属性の設定が出来ないっぽい?

リポジトリごとGitにしちゃう

svn2gitで変換してGitのリポジトリにpushすればGitリポジトリに早変わり!

おわり

svnリポジトリとやり取りするコマンドを除けば、ほぼ普通のgitと変わらないですね。