SOFTELメモ Developer's blog

Subversionから履歴を引き継いでgitへ移行(git-svn 使用例)

2024/05/13 git, linux, 未分類 ,

問題

Subversion管理されているソースがあります。

gitに移行したいです。

答え

git-svnを使用する。

準備

以下のようなエラーが発生する場合、

$ git svn
git: 'svn' is not a git command. See 'git --help'.

The most similar commands are
        fsck
        mv
        show

gitだけインストールした環境では別途以下が必要かもしれない。

apt install git-svn

手順

場所を作る

mkdir xxx
cd xxx

gitリポジトリ作成

git svn init -s --prefix=svn/ https://svn.example.com/aaa/bbb/xxx

必要に応じて設定を調整

/trunk、/branches、/tags を切って運用していたら .git/config と一致しており問題ない。

/trunk なしのディレクトリを取り込みたいときなどでは、.git/config を編集して調整する。

デフォルト

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[svn-remote "svn"]
        url = https://svn.example.com/aaa
        fetch = bbb/xxx/trunk:refs/remotes/svn/trunk
        branches = bbb/xxx/branches/*:refs/remotes/svn/*
        tags = bbb/xxx/tags/*:refs/remotes/svn/tags/*

trunkなしに変更

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[svn-remote "svn"]
        url = https://svn.example.com/aaa
        fetch = bbb/xxx:refs/remotes/svn/trunk

prefixのsvnはoriginみたいなリモートの名前になり、trunkはブランチ名になる。

後で名前を変えればよいので、必要以上にいじらなくてよい。

履歴取得

git svn fetch

履歴の多いリポジトリでは時間がかかる。

ある時期以降の履歴だけでよい場合は範囲指定可能。

git svn fetch -r リビジョン:HEAD

今後使用するgitリポジトリを追加

git remote add origin https://git.example.com/xxx.git

リモートにpush

git push -u origin master

関連するメモ

コメント