この移行ガイドでは、移行期間中には SVN から Git への一方向同期のみを行なうことを推奨しています。即ち、Git の慣熟期間中はチームメンバーによるコミットは引き続き SVN リポジトリに対するものに限るのです。切り替えの準備が整った時点で、SVN リポジトリはそれがどのような状態であろうともそこで使用停止します。そして開発者はそれぞれのローカルリポジトリに対してコミットを開始し、Bitbucket を経由してそれを共有します。

Git 移行: SVNからGitへの一方向同期

SVN から Git への不連続的な切り替えを行うことで極めて直観的な移行が可能になります。すべての開発者は今後使用する新しい Git ワークフローを理解しているはずであり、また Bitbucket からクローンしたローカルリポジトリ上で Git コマンドを使う練習時間を十分に与えられたはずです。


Git リポジトリの同期

Before finalizing your migration to Git, you should make sure that your Git repository contains any new changes that have been committed to your SVN repository. You can do this with the same process described in the Synchronize phase.

git svn fetch
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force


Git への切り替え以前の履歴を移行後の Git リポジトリで確認することは可能ですが、SVN の元データを調べる必要が生じた場合に備えてSVN リポジトリのバックアップをとっておくことは良い習慣です。SVN リポジトリのバックアップを行なう簡単な方法は、SVN の中央リポジトリをホストするマシーン上で次のようなコマンドを実行することです。SVN リポジトリが Linux マシーンにホストされている場合は、次のコマンドを使用します:

svnadmin dump <svn-repo> | gzip -9 > <backup-file>

Replace <svn-repo> with the file path of the SVN repository that you’re backing up, and replace <backup-file> with the file path of the compressed file containing the backup.

SVN リポジトリのリードオンリーへの切り替え

All of your developers should now be committing with Git. To enforce this convention, you can make your SVN repository read-only. This process can vary depending on your server setup, but if you’re using the svnserve daemon, you can accomplish this by editing your SVN repo’s conf/svnserve.conf file. It’s [general] section should contain the following lines:

anon-access = read
auth-access = read

This tells svnserve that both anonymous and authenticated users only have read permissions.


And that’s all there is to migrating a project to Git. Your team should now be developing with a pure Git workflow and enjoying all of the benefits of distributed development. Good job!

Git を学習する準備はできていますか?