#注意事項
- 実験の記録なので細かいことは無視してください
- subversionのtrunkの使い方が独自
- gitlabって書いてるけどたぶんgitでもOK
- たぶんsubvsersionの環境は関係ない
#対象読者
- とにかくsvbversion->gitlabにしたい
#前提条件
- gitlabがどこかのLinuxサーバにインストールされてる。
- ローカルのwindowsにgitが入っている。
#再現環境
-サーバー
OS:rhel6
GitLab:Community Edition 9.3.0
git:2.11
subversion:1.6.11
-ローカル
OS:windows7
git:2.10
#subversionの状態
trunkの下に各プロジェクトのソースを置いてしまった
-trunk
├ projectA
├ projectB <- 対象はこれ
├ projectC
1.Subversionのサーバにログインしてauthorのリストを作成する。
svn log http://(reposryサーバのURL)/trunk/projectB --xml | grep -P "^<author" | sort -u | \perl -pe 's/<author>(.*?)<\/author>/$1 = $1 <$1\@XXXXXX.co.jp> /' > (リストの掃出し先)
とやると
fujico = fujico <fujico@XXXXXX.co.jp>
fujigo = fujigo <fujigo@XXXXXX.co.jp>
というような工程6で使うgitlabに移植されるユーザの改訂履歴のマッピングデータができる。
2.GitlabにAuthorのリストに対応したユーザを作る
(1と2の作業いらない?未検証)
3.Gitlabでリポジトリを作る
readme.md以外は空のリポジトリを作る
移行先の名称は任意です。このタイミングで変えたい場合はかえる。
(今回サンプルで使うリポジトリの例)
http://(gitサーバのURL):8080/xxxx/projectB.git
4.ローカルのPCにgitの作業用ディレクトリを作成
(例)c:\src_dir\test
5.DOCプロンプト作業ディレクトリに移動
cd c:\src_dir\test
6.次のコマンドを実行する
次のコマンドを実行するとsubversionの形式からgitの形式に移行されたローカルリポジトリがc:\src_dir\testにできます。
サーバにpushまでされません。
git svn clone -A c:\(保存先)\工程1で作ったリスト --trunk=http://(reposryサーバのURL)/trunk/projectB http://(gitサーバのURL):8080/xxxx/projectB.git
この後、移行スクリプトが流れます。
7.ローカルリポジトリのprojectB.gitを確認
完了したc:\src_dir\testにprojectB.gitができていることを確認
8.リモートリポジトリの内容をマージ
出来上がったローカルリポジトリをリモートにpushする前に
工程3でsubversionになかったreadmeファイルの差分ができています。
なのでマージする必要があります。単純にマージするとエラーを吐きます。
cd c:\src_dir\test\projectB.git
> git merge
(エラーメッセージ)
fatal: refusing to merge unrelated histories
9.なので無視するコマンドを実行する。
> git merge --allow-unrelated-histories origin/master
10.移行内容をローカル->リモート
移行内容をgitに内容をpushして完了