at posts/single.html

GitHub を使ってみた

久しぶりに自由な時間を作れたので、バージョン管理ツールの Git を少し勉強。

Subversion との連携

題材として、 CodeRepos で管理している FlickrToBlog を git へ移行してみる。 Subversion と連携するには git-svn というコマンドを使う。 MacPort でインストールした git には、 git-svn が付属していなかった。 インストール時に +svn コマンドを付けなければいけないらしい。

$ sudo port upgrade git-core +gitweb +svn

インストールされた git は 1.6 系。

CentOS の場合は普通にインストールすれば OK だった。

$ sudo yum install git

既存のリポジトリからとりこんでみる。

$ git svn init http://svn.coderepos.org/share/lang/javascript/flickr2blog
$ git svn fetch
$ git branch -a
* master
  git-svn

Subversion 側のリポジトリは、 git-svn という名前のリモートブランチとして管理されている。 さらに Subversion 側が更新された場合には、まず git-svn ブランチに変更点を取り込み、それから master 側にマージするという流れっぽい。 Subversion 側の情報は git svn info コマンドで見ることができる。

$ git svn info
Path: .
URL: http://svn.coderepos.org/share/lang/javascript/flickr2blog
Repository Root: http://svn.coderepos.org/share
Repository UUID: d0d07461-0603-4401-acd4-de1884942a52
Revision: 20333
Node Kind: directory
Schedule: normal
Last Changed Author: drry
Last Changed Rev: 20333
Last Changed Date: 2008-10-01 04:17:11 +0900 (水, 01 10 2008)

git log とすれば、コミットログの履歴が表示される。 git log -p とすればソースの差分も分かる。

いろいろ試してみたけど、やはり Subversion とは勝手が違う。 ちゃんと時間をかけて、Git入門のチュートリアルを読まないとダメだった。 CVS から Subversion に移行するよりも、時間がかかりそう。

ついでに、 tDiary のカスタマイズも git で管理してみる。 普通に git svn fetch すると、すべてのリビジョン(リビジョン1からリビジョン3420まで)を取得しようとしたので慌てて中止。 現行開発版の 2.3.1 (リビジョン3365) を取り込んでみる。

$ git svn init https://tdiary.svn.sourceforge.net/svnroot/tdiary/ --no-metadata -s
$ git svn fetch -r 3365

--no-metadata が何を意味するのかは、よく分かっていない。 -s は、このリポジトリが trunk, branches, tags を含む場合に指定する(brances, tags を git のブランチに変換してくれる)。 fetch の時に -r オプションでリビジョンを指定すると、そのリビジョンのソースを取得してくれた。 ブランチの状況を確認。

$ git branch -a
* master
  trunk

さっきは git-svn だったけど、今度は trunk になってる。 -s オプションの影響か。 さらに最新のソースを取得してみる。

$ git svn fetch

これでリビジョン 3365 (2.3.1のリリース) から HEAD までの変更点が Git 側にも取り込まれた。 ブランチの数も増えてる。

$ git branch -a
* master
  Stable-2_2
  Test_Ruby19
  tags/Release-2_3_1
  trunk

まだ master ブランチはリビジョン 3365 のまま。 trunk ブランチは最新のリビジョン 3420 に追従している。 自分のカスタマイズは master ブランチか、適当に作ったローカルブランチに反映させておいて、どこかのタイミングで trunk リモートブランチの差分を master 側に反映するという使い方になる。

たしかに、慣れれば Subversion よりもブランチ&マージが簡単になりそう。 Git を使うときは、 Subversion よりもブランチを意識することが重要か。

GitHub で試す

Subversion との連携方法が分かったので、 GitHub でリポジトリを作ってみる。 すると、以下のように親切に手順を教えてくれる。

Global setup:

  Download and install Git
  git config --global user.name "MATSUOKA Kohei"
  git config --global user.email *****@machu.jp
        

Next steps:

  mkdir sandbox
  cd sandbox
  git init
  touch README
  git add README
  git commit -m 'first commit'
  git remote add origin git@github.com:machu/sandbox.git
  git push origin master
      

Existing Git Repo?

  cd existing_git_repo
  git remote add origin git@github.com:machu/sandbox.git
  git push origin master
      

Importing a SVN Repo?

  Click here
      

When you're done:

  Continue

Subversion リポジトリからも自動的に取り込んでくれるし、はじめから GitHub でやれば良かったかも。