久しぶりにSubversionのリポジトリをgitに移行したので手順をまとめておきます
2020/11/30 追記.加筆したエントリ http://pyopyopyo.hatenablog.com/entry/2020/11/30/154224
を新しく用意しました.
subversion側の状況を確認する
SVNでcheckout済みの作業ディレクトリにて,svn リポジトリのURLやパスを確認します
$ cd SVNの作業
$ svn info
SVNリポジトリは サーバ上の hogehogeディレクトリにあり,
SVNリポジトリの直下には src というディレクトリ,その下に trunkというディレクトリがあることがわかります
src ディレクトリの中身を確認します
$ svn list ^/src/ branches/ tags/ trunk/
trunk, branches, tags というディレクトリがあります.つまりこのリポジトリはSVNの標準的な構成になっています.
このような標準的な構成のSVNリポジトリは以下の手順で簡単にgitに移行できます.
また変則的な構成の場合でも,以下の手順を参考に git svnのhelpを読みながらオプションを大量に指定すればgitに移行できます
git側の準備
git のサブコマンド git-svn を使います.インストールされてない環境も多いので,予め確認&追加インストールしておきます.
まず試しに起動してみます.インストール済みならヘルプが表示されます.
未インストールの場合は 以下のようなエラーメッセージが出ます
$ git svn git: 'svn' is not a git command. See 'git --help'.
この場合は追加インストールします.debian とか ubuntu なら
$ sudo apt install git-svn
でOK
SVNからgitへの変換
$ git svn clone --stdlayout --prefix=svn/ [svn-repo] [git-dir]
[svn-repo]は,上記の svn infoで調べたURLです.
上記の例に従えば svn+ssh:///サーバ名/hogehoge/src/ になります
オプションの意味は以下の通りです
- [svn-repo]は tagsやtrunkがある標準構成になっているので --stdlayout をつける
- svn由来のブランチで有ることを示すため "--prefix=svn/" をつけます.これで git の remote-tracking ref が refs/remotes/svn/ となります.
[git-dir]は出力先ディレクトリ名です. ここに作業デレクトリが作成されます
確認
ログやブランチの状況を確認します
$ git log
$ git branch -a