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 でやれば良かったかも。