2009-01-27

Git-svn 最初の一歩

Git から Subversion リポジトリーをいじれるという話なので、試してみた。

Svn リポジトリーと通信する時は git svn SUBCOMMAND を使い、ローカル・リポジトリーをいじる時は git の素のコマンドを使えるっぽい。

インストール

Ubuntu ならパッケージで一発インストール。

$ sudo apt-get install git-svn

使い方

help

まずはヘルプの表示方法。

$ man git-svn

もしくは

$ git help svn
checkout

git svn clonesvn checkout に相当する。使い方:

$ git svn clone URI

今回、Google Code にホスティングしている自分のプロジェクトを取って来た。

$ git svn clone https://texsymb.googlecode.com/svn/trunk/ texsymb --username masayuki.ataka

--username オプションも、ちゃんと使えるね。

ローカルで作業

ローカルで作業する分には、git のコマンドが使える。

$ git log
...                         # ログがズラズラと...
$ git branch
* master                    # Git のブランチが確認できる
$ git checkout -b test
Switched to a new branch "test"
$ git branch
  master
* test                      # test ブランチ作ってみた
$ gitk                      # gitk で開発の流れも GUI 化できる 

ファイルを編集したら、git add 後に git commit。ここら辺は、Git の普段の操作と変わんない。

$ cd texsymb
$ touch README
$ git add README                                   # New file を add して
$ git commit -m 'Add new file README'              # commit
Created commit a27bf67: Add new file README
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
$ git log
commit a27bf67ef702ff983f99713f7d4d2812b3d3476e
Author: ataka <masayuki.ataka@gmail.com>
Date:   Tue Jan 27 05:08:01 2009 +0900

    Add new file README
...

git svn log を使うと、Subversion 形式のログを読める。

$ git svn log
------------------------------------------------------------------------
r8 | masayuki.ataka | 2007-02-08 19:22:13 +0900 (木, 08  2月 2007) | 2 lines

TeX-symb is now minor mode.

ただし、ローカルに git commit した分のログは読めないみたい。

リポジトリーに commit

git-svn dcommitsvn commit に相当する。

$ git svn dcommit

って、まだ試してない ^^; ローカルの git commit 分を一気にリポジトリーにコミットしてくれるらしい。

リポジトリーから update

リポジトリーの変更分を取って来る方法。

$ git svn rebase

こちらも、まだ試してない。

man を斜め読みした感じだと、git-pull (と git-merge) は開発ブランチが分岐してしまうので、よろしくないらしい。Svn リポジトリーに取り込むのが大変みたい。なので、git-rebase が良いのだとか。

ここら辺、Git の merge と rebase が分かってないので、勉強する必要あるなぁ。

Fetch

ちと git, git なお話。

git branch -r すると、git-svn というブランチにリモート・リポジトリーが保存されてるっぽい。

$ git branch -r
git-svn

git svn fetch コマンドで、リモートの変更を git-svn ブランチに取り込めるんじゃないかな?

$ git svn fetch

そうすれば、git svn rebase する前に、リモートでの変更分を確認できる (気がする)。後で試そう。

$ git log git-svn
$ git svn rebase -l

あとがき

これが使い込なせると、Google Code 上にある svn リポジトリーをいじれるようになるなぁ。すると、色々止まってたプロジェクトも再開できるかもしれない :p

No comments:

Post a Comment