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