2009年04月02日 03:30 [Edit]

tips - svnメイン、でもgithubでも公開したい場合の最小手順

というわけで、遅ればせながらgithubはじめました。

のですが、正直どうもgitにはとっつけない。RCS → CVS → subversion というのは、コマンド体系も互換性が高い正常進化でとっつきやすかったのですが、gitはそもそも考え方からして違うということも大きいかと思います。

というわけで、とりあえずひきつづき subversion をメインに使いつつ、githubでも公開したい場合どうしたらいいのかという備忘録を。


  1. gitクライアントの入手

    入手は以下から。

    私はOS Xのバイナリを素直にインストールしました。インストールすると /usr/local/git を prefix としたインストールがなされるので、$PATH/usr/local/git/binを、$MANPATH/usr/local/git/manを加えておきます。

  2. githubアカウントの取得とsshの設定

    これはとりたてて難しいことはないと思いますが、はまるとしたらpublic keyの登録かも知れません。以下のページが大変参考になります。

    私の場合、通常使っている public key をそのまま登録しました。まだ public key を作っていない人は、以下も参考になるかもしれません。

    ただし、これだけでは駄目で、以下に相当する項目を~/.ssh/configに記入する必要がありました。

    Host github.com
      User git
      Port 22
      Hostname github.com
      IdentityFile ~/.ssh/your_id_dsa
      TCPKeepAlive yes
      IdentitiesOnly yes
    
  3. githubでのレポジトリ作成

    これで準備完了なのですが、この先に進む前に、練習用のレポジトリを作成して少し遊んで指をならしておくとよいかも知れません。レポジトリを消すのはクリック一発なので身構える必要はありません。

    それが済んだものとして先に進みます。

    dashboardから"create a new one"をクリックすると、この画面になると思います。

    github-create-repo

    ここでは、/lang/perl/Tie-Array-Lazy ? CodeRepos::Share ? Tracをgithub上のp5-tie-array-lazyとして登録しようとしている例です。

    repositoryの名前ですが、codereposが言語ごとにディレクトリが切られているのに対し、githubではフラットなので、FreeBSDのportsっぽく頭にp5をつけています。あと、githubのrepository名はすべて lower case 。大文字で書いても勝手に小文字になります。

  4. githubへの登録

    レポジトリ作成が終わると、何をすべきなのか懇切丁寧に解説した画面が出てきますが、無視してください。私の場合、実はここが唯一はまったところです。特にsubversionからrepositoryを引っ張ってくるところで、Webインターフェイスを使ってはいけません。ちっとも終わらない。

    その代わり役にたったのは

    でした。以下ではその手順に実際に従って作業している様子です。

    % git svn clone -s http://svn.coderepos.org/share/lang/perl/Lingua-JA-Numbers p5-lingua-ja-numbers
    Initialized empty Git repository in /Users/dankogai/github.com/p5-lingua-ja-numbers/.git/
    W: Ignoring error from SVN, path probably does not exist: (175007): HTTP Path Not Found: REPORT request failed on '/share/!svn/bc/100/lang/perl/Lingua-JA-Numbers': '/share/!svn/bc/100/lang/perl/Lingua-JA-Numbers' path not found
    W: Do not be alarmed at the above message git-svn is just searching aggressively for old history.
    This may take a while on large repositories
    r31799 = 4740c265978d7e7d20ab4c37bfc3522398a0281f (git-svn)
    	A	trunk/t/03-OO.t
    	A	trunk/t/01-RoundTrip.t
    	A	trunk/t/04-LJN.t
    	A	trunk/t/02-Manman.t
    	A	trunk/t/00-Use.t
    	A	trunk/MANIFEST
    	A	trunk/META.yml
    	A	trunk/lib/Lingua/JA/Numbers.pm
    	A	trunk/Makefile.PL
    	A	trunk/Changes
    	A	trunk/README
    r31800 = d26c01ee5808926ce19f363bd10eab4241136fb8 (git-svn)
    Checked out HEAD:
      http://svn.coderepos.org/share/lang/perl/Lingua-JA-Numbers r31800
    % cd p5-lingua-ja-numbers/
    % git remote add origin git@github.com:dankogai/$cwd:t.git
    % git push origin master
    Counting objects: 20, done.
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (20/20), 13.64 KiB, done.
    Total 20 (delta 3), reused 0 (delta 0)
    To git@github.com:dankogai/p5-lingua-ja-numbers.git
     * [new branch]      master -> master
    

    git cloneですが、-sをつけるべきでしょう。miyagawaコメントにあるとおり。つけない場合、trunkなどがそのままgithubにあらわれますが、これはあまりgit的ではないので。

  5. あとは今までどおり + git svn rebase

    あとは今までどおり subversion を使い続け、githubの更新は上記で作成されたlocal directoryに入ってgit svn rebaseすればOKです。

github、あちこちにhelpがあって実に懇切丁寧なのですが、それでもgitって非直感的だなあ....git-svnが標準装備でよかった....

Dan the git Newbie


この記事へのトラックバックURL

この記事へのコメント
ディレクトリ構成はこうすべき、というルールがあるわけではないので、どうでもいいっちゃいいのですが、

gitのルートディレクトリの trunk ディレクトリがあるのはあまり一般的ではないように思います。svn では trunk, branches, tags が普通のディレクトリとして扱われるのに対して git では tag, branch が組み込みになっているので、git(hub) の master = svn の trunk という風にするとよいかと。

git はローカルでいじってる間から適当に git init していって、公開したくなったら remote に push する、というのが RCS -> CVS の進化と似ている気がしています。
Posted by miyagawa at 2009年04月02日 05:09