プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2021/07/03

git-svn の使い方

update2022/01/06 event_note2021/07/02 17:55

社内で未だに 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