こんにちは。
キャスレーコンサルティングのSI(システム・インテグレーション)部の長岡です。
前回のブログ「Git 初心者による EGit 入門」で触れたEGit で対応出来ないリファクタリング操作について、Git コマンドを使って初心者でも簡単に出来るようにご紹介します。
目次
- SVN からGit への移行方法
- 別のリポジトリをサブディレクトリに取り込む方法
SVN からGit への移行方法
SubversionのリポジトリからGitHubのリポジトリに移行したい場合は、下記の手順を行います。
前提条件
SVNリポジトリ、GitHubリポジトリは作成済みである事とします。
ローカルにsvn のcloneブランチ作成
SubversionのリポジトリをGitへ移行したい場合は、Git と Subversion を双方向にブリッジする git svnコマンドを使います。
git svn cloneを使って、svn のcloneブランチ作成します。
git svn cloneを使う場合は、–prefixオプションで接頭辞を付けましょう。
$ git svn clone -s --prefix svn/ <svnのURL> $ cd <clone先ディレクトリ> $ git branch -a * master remotes/svn/tags/v1.0.0 remotes/svn/trunk remotes/svn/v1.x
SVN側が標準ディレクトリ構成(Trunk, branches, tags)のリポジトリの場合はこれでよいが、標準的なディレクトリ名を使っていない場合は、-T/-t/-b(もしくは–trunk/–tags/–branches)で指定しましょう。
$ git clone -s --prefix svn/ -T dev -t release -b support <svnのURL>
git svnコマンドでfile://でローカルパスを設定する場合にドライブ文字に:を付けてはいけません。
# NG $ git clone -s --prefix svn/ file:///C:/work/SVN/repository/tutorial # OK $ git clone -s --prefix svn/ file:///C/work/SVN/repository/tutorial
リモートリポジトリを設定
まだローカルリポジトリにあるだけなので、リモートリポジトリを追加します。
$ git remote add origin <GitHubのURL> $ git remote -v origin <GitHubのURL> (fetch) origin <GitHubのURL> (push)
リモートリポジトリへプッシュ
後はpushをして完了です。
$ git push -u origin --all
別のリポジトリをサブディレクトリに取り込む方法
以下のリポジトリを
child-project |-folderA |-folderB |-.git
以下のようなディレクトリ構造にリファクタリングしたい。
parent-project |-.git |- child-project |-folderA |-folderB
このようにリポジトリのサブディレクトリに、別のリポジトリを取り込みたい場合は、下記の手順を行います。
取込先にサブディレクトリを作成
取込先をcloneした後、clone先ディレクトリに移動し、サブディレクトリ(child-project)を作成します。
$ git clone <GitHubのURL> $ cd <clone先ディレクトリ> $ mkdir child-project
取込元をremoteに登録
取込元のリモートリポジトリを追加します。
$ git remote add child-project git@github.com:atomkun/child-project.git $ git remote -v child-project <GitHubの取込元URL> (fetch) child-project <GitHubの取込元URL> (push) origin <GitHubの取込先URL> (fetch) origin <GitHubの取込先URL> (push)
取込元の情報をfetch
取込元「child-project」の情報をfetchします。
$ git fetch child-project
取込元と取り込み先をマージ
fetchして持ってきたchild-projectリポジトリのmasterブランチをchild-projectフォルダにマージ
$ git merge -X subtree=child-project child-project/master # ログ履歴が反映されたか確認 $ git log --graph --pretty='format:%C(yellow)%h%Creset %s %Cgreen(%an)%Creset %Cred%d%Creset'
push
最後にpushをして完了です。
$ git push
最後に
如何でしたでしょうか?
開発を行っているとバージョン管理システムを変更しよう、リポジトリを統合しようという状況は必ず訪れると思います。
確実に身に着け、焦らず行いましょう!
それではここまで読んでいただきありがとうございました。