7 アップストリームの VCS と付き合う

岩松信 洋

PIC
____________________________________________________________________

VCS を使ってアップストリームがソフトウェアの開発を行っている事が多くあります。 アップストリームでは、 Subversion を使っているが、 パッケージメンテナは Git を使ってパッケージを行っている場合があったり、 同じ VCS を使っている場合も あります。 今回は Subversion を例にして、 お互い VCS を使っている場合、 どのように付き合っていくことができるのか説 明します。

7.1 アップストリームが Subversion を使っている場合

Subversion で管理されているソースコードを取得したり、 Subversion リポジトリへコミットするツールとして、 git-svn パッ ケージがあります。 git-svn を使うことによって、 容易にお互いのリポジトリ間を行き来することができるようになり ます。

7.1.1 Subversion のリポジトリから Git のリポジトリへソースコードを取得する

Subversion のリポジトリから Git のリポジトリへソースコードを取得するには適当なディレクトリを作成 し、 git svn の clone オプションを使って行います。 取得した後は、 Git の操作で開発を行うことができ ます。

$ mkdir test
$ git svn clone svn://test/trunk test-0.0.1

7.2 取得したコードを元に Debian Package を作成する

取得したコードから新しく Debian Package を作成するためには、 自分でタグを付ける必要があります。 git-buildpackage ではタグと Debian changelog から Upstream の情報を取得し、 orig.tar.gz 相当のものを作成するため、 タグを付ける必要が あ り ま す 。

$ git branch
master
$ git branch upstream
$ git checkout upstream
$ git tag upstream/0.0.1
$ dh_make --createorig
$ git branch master
.... Debian Package  用のファイル作成などを行う ....
$ git-buildpackage -us -uc --git-ignore-new
$ debuild clean
$ git add debian
$ git commit -a
$ git-buildpackage -us -uc --git-ignore-new --git-tag
7.2.1 Subversion リポジトリの情報を取得する

Subversion リポジトリの情報を取得するには、 rebase オプションを使います。 最初から git svn でリポジトリの操作を行っ ている場合は、 rebase を使うことにより、 Upstream のコードをパッケージ側に反映させることができます。

$ git checkout upstream
$ git svn rebase

7.3 すでにあるパッケージと Git リポジトリを元に Debian Package を作成する

git svn で取得した Git リポジトリと 既にある Debian Package を連携させるには操作が少し必要です。 まず、 git-import-dsc で現在の Debian Package を git-buildpackage で管理できるようにした後、 upstream ブランチに git svn で取得したリポジトリから pull をしま す。 pull することにより、 コミットログの共有することが できます。 しかし、 Debian Changelog の操作や、 git tag を使ったタグの操作を手動で行う必要があるのが問題点で す。 git-import-org を使って、 tar.gz やソースコード を指定して、 マージすることも可能ですが、 Upstream 側 のコミットログが取り込まれないため、 Git を使うメリッ トがあまり無いと私は考えています。 このあたりを改善し ていく事が今後の課題になりそうです。

PIC
$ git svn clone svn://svn.berlios.de/linux-uvc/linux-uvc/trunk\
 linux-uvc.git
$ git import-dsc  ../../../debian/linux-uvc_0.1.0.svn193-2.dsc
$ cd linux-uvc
$ git branch
* master
  upstream
$ git tag
debian/0.1.0.svn193-2
upstream/0.1.0.svn193
$ git checkout upstream
$ git pull ../linux-uvc.git/
$ git tag upstream/0.1.0.svn201
$ git checkout master
$ dch -v 0.1.0.svn201
$ git-buildpackage -us -uc --git-ignore-new
$ debuild clean
$ git commit -a
$ git-buildpackage -us -uc --git-ignore-new --git-tag

第 39 回東京エリア Debian 勉強会 2008 年 4 月
____________________________________________________________________________________________