SubversionのリポジトリをGitで扱う
svnコマンドはログが見づらいし、コミットしたらリモートにソッコーで飛んで行くし、Gitに慣れた僕には凄く扱いづらい。てことでgit-svnネタです。
一年くらい前からずっと下書き状態だったのを思い出したので公開。他にもコレ系の記事は沢山あるけど自分用のメモとして。ね。
svnリポジトリからチェックアウト
いつものcloneコマンドにsvnを付けるだけ。
git svn clone -s http://svn.example.com/Project_Name/
-sオプションを付けると、svnリポジトリが trunk 、 branches 、 tags のような、お馴染みの構造だよって言うのをgitに教えられる。教えておくと、ブランチやタグがgitのリモートブランチとして扱えるようになるので便利。
また、 trunk 、 branches 、 tags の名称が一般的なモノとは異なる場合は、
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と変わらないですね。