なか日記

一度きりの人生、楽しく生きよう。

git svnを使ってTracLightningのSVNリポジトリへclone,docomitしてみる

タイトル長っ!

TracLightningを使っている場合、標準でSubversionリポジトリと連携するように環境が整えられています。設定をすればGitのリポジトリと連携するようにも出来ますが、チケットとの連携等を考えるとそのままSubversionを使うのがお手軽で便利なのではないかと思い、以下の組み合わせでの使い心地を試してみました。

サーバ TracLightning+Subversion
クライアント Git

ちなみに、TracLightningのプロジェクトは新規に作成した物を使いました。

まずはclone

Subversionからデータを持ってこないと話になりませんので、まずは git svn clone します。

nakaji@PC01 /d/Work/myproject (master)
$ git svn clone http://localhost/svn/myproject/
Initialized empty Git repository in d:/Work/myproject/.git/

ローカルで編集

適当にローカルでファイルを編集して commit します。

nakaji@PC01 /d/Work/myproject (master)
$ git add trygitsvn.txt

nakaji@PC01 /d/Work/myproject (master)
$ git commmit

nakaji@PC01 /d/Work/myproject (master)
$ git commit
[master e01153b] blog title was decided 蜑肴嶌縺阪r譖ク縺・◆縲・refs #1
 1 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 trygitsvn.txt

この辺は普通にGit使ってる時と同じですね。

ちなみに、ログには以下の様な事を書きました。
日本語のログが正しく反映されるか、「refs #1」がチケット#1に連携されるかがポイントかな。

blog title was decided
前書きを書いた。
refs #1

最後に、dcommit

最後にGitでの編集内容をSubversionリポジトリに戻すために、dcommitしてみます。

$ git svn dcommit
Unable to determine upstream SVN information from HEAD history.
Perhaps the repository is empty. at C:\Program Files (x86)\Git/libexec/git-core/git-svn line 505.

あれ?怒られてしまいました。

メッセージを見る限り、空のリポジトリだとダメみたい。

気を取り直してリトライ

今度は予めファイルをSubversionで1回コミットして同じ事をしてみました。

nakaji@PC01 /d/Work
$ git svn clone http://localhost/svn/myproject/
Initialized empty Git repository in d:/Work/myproject/.git/
        A       trygitsvn.txt
r1 = 2d49e79f5b8e67abf9f54d2108c16eeaaf9aa41c (refs/remotes/git-svn)
Checked out HEAD:
  http://localhost/svn/myproject r1

nakaji@PC01 /d/Work/myproject (master)
$ git commit -a
[master aaf9af5] blog title was decided 蜑肴嶌縺阪r譖ク縺・◆縲・refs #1
 1 files changed, 53 insertions(+), 0 deletions(-)

$ git svn dcommit
Committing to http://localhost/svn/myproject ...
        M       trygitsvn.txt
Committed r2
        M       trygitsvn.txt
r2 = 526169cb3746ce237656ba7826abb863d5bef027 (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn

お、上手くいったみたい。
f:id:nakaji999:20091212215628j:image
[1]は予め行ったSubversionでのコミットログで、[2]がGitから行ったdcommitです。

日本語ファイル名(フォルダ名も)を使わなければ、結構お手軽でいい構成かもしれませんね。

他に確認したいこと

TracLightningで「チケットに関するコメントを必須にする - タイトルは未定」の設定を行ってた場合、git commitする時にチケット番号入れ忘れると面倒なことになりそうですね。dcommitする時に怒られると思うので、後からまとめてコミットログを修正しないといけなくなる…

この辺はローカルの「commit-msg」フックを使ってチェックするようにしたらいいんだろうなぁ。ということで、これは今度考えてみよう。