読者です 読者をやめる 読者になる 読者になる

CentOS 5 で既存 Subversion リポジトリを Git から使えるようにする

Git
参考にしたもの
git-svnを使って既存のSVNリポジトリでGitを使う方法のメモ - Hello, world! - s21g
git-svnメモ - I sort my thought...

インストール

標準パッケージに Git はないので、RPMForge を yum で使う設定が必要
CentOS 5.2 で yum の対象リポジトリに RPMforge を追加するには - Tosshi Note

# yum install --enablerepo=rpmforge
(省略)
Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing for dependencies:
 git                     i386       1.5.2.1-1.el5.rf  rpmforge           27 M
 perl-Compress-Zlib      i386       1.42-1.fc6       base               52 k
 perl-Error              noarch     0.17015-1.el5.rf  rpmforge           27 k
 perl-Git                i386       1.5.2.1-1.el5.rf  rpmforge           18 k
 perl-HTML-Parser        i386       3.55-1.fc6       base               92 k
 perl-HTML-Tagset        noarch     3.10-2.1.1       base               15 k
 perl-libwww-perl        noarch     5.805-1.1.1      base              376 k
 subversion-perl         i386       1.4.2-2.el5      base              748 k

Transaction Summary
=============================================================================
Install      8 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 28 M
(省略)
Running Transaction
  Installing: perl-Error                   ######################### [1/8] 
  Installing: subversion-perl              ######################### [2/8] 
  Installing: perl-HTML-Tagset             ######################### [3/8] 
  Installing: perl-HTML-Parser             ######################### [4/8] 
  Installing: perl-Compress-Zlib           ######################### [5/8] 
  Installing: perl-libwww-perl             ######################### [6/8] 
  Installing: perl-Git                     ######################### [7/8] 
  Installing: git                          ######################### [8/8] 

Dependency Installed: git.i386 0:1.5.2.1-1.el5.rf perl-Compress-Zlib.i386 0:1.42-1.fc6 perl-Error.noarch 0:0.17015-1.el5.rf perl-Git.i386 0:1.5.2.1-1.el5.rf perl-HTML-Parser.i386 0:3.55-1.fc6 perl-HTML-Tagset.noarch 0:3.10-2.1.1 perl-libwww-perl.noarch 0:5.805-1.1.1 subversion-perl.i386 0:1.4.2-2.el5
Complete!

Git リポジトリSVN から作成

この後のサンプルは SVN リポジトリ URLfile:///var/svn/project とします。その階層下に trunk / brunches / tags がそれぞれあるとします。

trunk / brunches / tags の全部取得する

下記だと SVN リポジトリの trunk / brunches / tags の全部取ってきてしまうので、結構時間がかかります。

$ git-svn clone file:///var/svn/project
(省略)
Checking 4129 files out...
 100% (4129/4129) done
Checked out HEAD:
  file:///var/svn/project r185
直近のリビジョン以降かつ trunk だけを取得する
$ git svn clone --trunk trunk --revision 180 file:///var/svn/project
Initialized empty Git repository in .git/
(省略)
r180 = 2b82878aaa2fe3edac8e7f91b27a319fee51802a (trunk)

Checked out HEAD:
  file:///var/svn/project/trunk r180

Git の設定を確認

使い始める前に設定を確認してみる。user.name が空になっている。

$ cd project
$ git config -l
user.name=
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
svn-remote.svn.url=file:///var/svn/project
svn-remote.svn.fetch=trunk:refs/remotes/trunk

ユーザー名 user.name とメールアドレス user.email を設定します。

$ git config --global user.name toshi
$ git config --global user.email toshi@midgar.local

再度確認すると設定されています。

$ git config -l
user.name=toshi
user.email=toshi@midgar.local
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
svn-remote.svn.url=file:///var/svn/project
svn-remote.svn.fetch=trunk:refs/remotes/trunk

Git で編集する

svn commit と同じです。ファイルを更新した後、git commit を行います。

$ git commit <修正したファイル>

Git の変更を SVN リポジトリに反映させます。

$ git-svn dcommit

Subversion の更新を手元の Git に反映する

$ git-svn rebase