社内で未だに SVN で開発しているプロダクトがあるので、git-svn を使ってみました。
環境
- Ubuntu 20.04
- git 2.25.1
- svn 1.13.0
インストール
$ sudo apt install git-svn
クローン
SVN リポジトリを指定してクローンを行います。
$ git svn clone --prefix=svn/ <SVNリポジトリのURL>
--prefix
は SVN のブランチに接頭辞をつけるオプションで、一般的に付けたほうがよいとされています。
SVN リポジトリが標準的な構成(trunk, branch, tag) になっている場合は -s
オプションを付けます。
標準的な構成になっていない場合は --trunk
branches
--tags
を使用する。
今回はルートが trunk になっており、ブランチも作成していなかったため、以下のように指定しました。
$ git svn clone --trunk=/ --prefix=svn/ <SVNリポジトリのURL>
試しにブランチを表示してみると、以下のようになっていました。
$ git branch -a
* master
remotes/svn/trunk
コミット
コミットは普通に git を使ってやるのと同じです。
SVN リポジトリにコミットを反映する
git でのプッシュに該当する操作として、SVNにコミットを行います。
コミット前にリベースで git のコミットをまとめておいたほうがいいかもしれません。
$ git svn dcommit
SVN リポジトリから最新のデータを取得
リベースを行うことになるみたいです。
$ git svn rebase
尚、これを行うにはワークディレクトリ内の全ての変更がコミットされている必要があるみたいです。 コミットしていない変更があった場合、以下のようなエラーが表示されます。
/workspace/hoge: needs update
update-index --refresh: command returned error: 1