本連載では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説しています。今回は、「git svn」コマンドを使ってGitからSVNリポジトリへアクセスする操作、「GitHub Importer」を使ってSVNからGitHubへ移行する操作、SVNクライアントからGitHubリポジトリへアクセスする操作について。
本連載「こっそり始めるGit/GitHub超入門」では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説していきます。具体的な操作を交えながら解説していきますので、本連載を最後まで読み終える頃には、GitやGitHubの基本的な操作が身に付いた状態になっていると思います。
前回の記事「GitHubとSlackの連携の基本&知られざる便利機能Wiki、Releases、Graphs、Pulse」ではPulse、Graphs、Releases、Wiki、外部サービスとの連携について解説しました。
連載第14回の本稿では「Apache Subversion(SVN)との連携や移行」について、以下の3つの基本的な操作を順に解説していきます。
本稿における作業に必要な環境を構築する手順は省略します。以下の環境を各自ご用意ください。
「git svn」コマンドについては、本連載の第1回記事でGitのインストールが完了していれば、既に利用できるかと思います。「svn」のパッケージはこちらから入手できます。
Subversionリポジトリは、sourceforgeなどのホスティングサービスを利用して作成できます。
「git svn」コマンドは、SubversionリポジトリとGitリポジトリの橋渡しを行ってくれるものです。
このコマンドを使用すると、ローカルでGitの機能を活用した作業を行いつつ、その結果をSubversionリポジトリに反映できます。
今回は、以下の3つの操作を行っていきます。
作業用の適当なディレクトリに移動します。
$ cd /Users/hirayashingo/at-it-14/work-with-git-svn
「git svn clone -s {Repository URL}」コマンドを使用して、Subversionリポジトリ全体をローカルのGitリポジトリにインポートします。今回使用したSubversionリポジトリはコミット数が10以下の大きさでしたが、インポートするのに1分ぐらいかかりました。
$ git svn clone -s svn+ssh://username@svn.code.sf.net/p/sample/code/
インポートが完了すると、作業用ディレクトリ内にGitリポジトリが作成されているのを確認できます。
今回試した環境の場合、この時点でのブランチは以下のようになりました。
$ git branch -a * master remotes/origin/feature remotes/origin/tags/release-0.1 remotes/origin/trunk
「git checkout -b」コマンドを使用すると、リモートブランチを元にローカルにブランチを作成できます。
$ git checkout -b feature origin/feature Switched to a new branch 'feature' $ git branch * feature master
ここまでの操作によって、SubversionリポジトリからGitリポジトリをローカルに作成できました(このGitリポジトリからGitHubの新規リポジトリを作成すれば、SubversionリポジトリからGitHubへの移行を完了させることができます)。
次に、ローカルのGitリポジトリに変更を行い、その変更をSubversionリポジトリに反映します。
ファイルを変更し、コミットします。
$ echo "Add text from git-svn" >> hoge.txt $ git add hoge.txt $ git commit -m "Update hoge.txt" [master 48e1db7] Update hoge.txt 1 file changed, 1 insertion(+), 1 deletion(-)
「git svn dcommit」コマンドを使用して、変更をSubversionリポジトリに反映します。
$ git svn dcommit Committing to svn+ssh://username@svn.code.sf.net/p/sample/code/trunk ... M hoge.txt Committed r8 M hoge.txt r8 = 1a255450e2c77a2d594daadbcbc1d583890f7608 (refs/remotes/origin/trunk) No changes between 48e1db7dc129d38208928192c19ab41f76304588 and refs/remotes/origin/trunk Resetting to the latest refs/remotes/origin/trunk
最後に、Subversionクライアントから、Subversionリポジトリの最新データを取得し、「git svn」コマンドによる変更がSubversionリポジトリに反映されていることを確認します。
Subversionリポジトリの作業コピーが存在するディレクトリに移動します。
$ cd /Users/hirayashingo/at-it-14/svn-working-copy
作業コピー更新し、ログを見ると「git svn」コマンドによる変更を確認できました。
$ svn update $ svn log ------------------------------------------------------------------------ r8 | username | 2017-06-24 12:34:21 +0900 (Sat, 24 Jun 2017) | 1 line Update hoge.txt ------------------------------------------------------------------------ ....
「git svn」コマンドを使用して、GitからSubversionリポジトリへアクセスする操作の解説は以上です。
Copyright © ITmedia, Inc. All Rights Reserved.