たった3つで共存できる、Git/GitHubとSubversion(SVN)の連携、移行に関する基本操作:こっそり始めるGit/GitHub超入門(14)(1/3 ページ)
本連載では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説しています。今回は、「git svn」コマンドを使ってGitからSVNリポジトリへアクセスする操作、「GitHub Importer」を使ってSVNからGitHubへ移行する操作、SVNクライアントからGitHubリポジトリへアクセスする操作について。
Subversion(SVN)環境がある現場、必見
本連載「こっそり始める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」コマンドを使用して、GitからSubversionリポジトリへアクセスする(図1の【1】の操作)
- 「GitHub Importer」を使用して、SubversionからGitHubへの移行を実行する(図1の【2】の操作)
- SubversionクライアントからGitHubリポジトリへアクセスする(図1の【3】の操作)
環境構築について
本稿における作業に必要な環境を構築する手順は省略します。以下の環境を各自ご用意ください。
- 「git svn」コマンドを実行できる環境
- 「svn」コマンドを実行できる環境
- Subversionリポジトリ(一般的な構造である「trunk/」「branches/」「tags/」を採用したリポジトリ)
「git svn」コマンドについては、本連載の第1回記事でGitのインストールが完了していれば、既に利用できるかと思います。「svn」のパッケージはこちらから入手できます。
Subversionリポジトリは、sourceforgeなどのホスティングサービスを利用して作成できます。
【1】「git svn」コマンドを使用して、GitからSubversionリポジトリへアクセスする
「git svn」コマンドは、SubversionリポジトリとGitリポジトリの橋渡しを行ってくれるものです。
このコマンドを使用すると、ローカルでGitの機能を活用した作業を行いつつ、その結果をSubversionリポジトリに反映できます。
今回は、以下の3つの操作を行っていきます。
- Subversionリポジトリから、ローカルのGitリポジトリを作成する
- ローカルのGitリポジトリに変更を行い、Subversionリポジトリへ反映する
- Subversionリポジトリへの変更を確認する
Subversionリポジトリから、ローカルのGitリポジトリを作成する
作業用の適当なディレクトリに移動します。
$ 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リポジトリへ反映する
次に、ローカルの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クライアントから、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リポジトリへアクセスする操作の解説は以上です。
関連記事
- GitHub(ギットハブ)の使い方:グループの作成編
ソフトウェア開発プロジェクトの共有Webサービス「GitHub(ギットハブ)」を「日本語で」分かりやすく説明するシリーズ、今回はグループの作成と設定を解説します。 - プルリクエスト/レビューを取り込んだ、よりシンプルなGitHub Flowの運用を図解する
数回にわたってgit-flowとGitHub Flowを使ったGitの活用テクニックを紹介します。最終回は、GitHubが採用している、git-flowよりシンプルな構成のブランチ管理フローについてです。5つの運用ルールや開発の流れを図を交えて解説します。 - GitHubをもっとソーシャルに使いこなすための7つ道具
「Java News.jp(Javaに関する最新ニュース)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします(編集部)
Copyright © ITmedia, Inc. All Rights Reserved.