連載
» 2017年07月03日 05時00分 UPDATE

こっそり始めるGit/GitHub超入門(14):たった3つで共存できる、Git/GitHubとSubversion(SVN)の連携、移行に関する基本操作 (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つの基本的な操作を順に解説していきます。

図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リポジトリへアクセスする操作の解説は以上です。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。