というわけで、遅ればせながらgithubはじめました。
のですが、正直どうもgitにはとっつけない。RCS → CVS → subversion というのは、コマンド体系も互換性が高い正常進化でとっつきやすかったのですが、gitはそもそも考え方からして違うということも大きいかと思います。
というわけで、とりあえずひきつづき subversion をメインに使いつつ、githubでも公開したい場合どうしたらいいのかという備忘録を。
- gitクライアントの入手
入手は以下から。
私はOS Xのバイナリを素直にインストールしました。インストールすると
/usr/local/git
を prefix としたインストールがなされるので、$PATH
に/usr/local/git/bin
を、$MANPATH
に/usr/local/git/man
を加えておきます。 - 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
- githubでのレポジトリ作成
これで準備完了なのですが、この先に進む前に、練習用のレポジトリを作成して少し遊んで指をならしておくとよいかも知れません。レポジトリを消すのはクリック一発なので身構える必要はありません。
それが済んだものとして先に進みます。
dashboardから"create a new one"をクリックすると、この画面になると思います。
ここでは、/lang/perl/Tie-Array-Lazy ? CodeRepos::Share ? Tracをgithub上の
p5-tie-array-lazy
として登録しようとしている例です。repositoryの名前ですが、codereposが言語ごとにディレクトリが切られているのに対し、githubではフラットなので、FreeBSDのportsっぽく頭にp5をつけています。あと、githubのrepository名はすべて lower case 。大文字で書いても勝手に小文字になります。
- 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的ではないので。 - あとは今までどおり + git svn rebase
あとは今までどおり subversion を使い続け、githubの更新は上記で作成されたlocal directoryに入って
git svn rebase
すればOKです。
github、あちこちにhelpがあって実に懇切丁寧なのですが、それでもgitって非直感的だなあ....git-svnが標準装備でよかった....
Dan the git Newbie
gitのルートディレクトリの trunk ディレクトリがあるのはあまり一般的ではないように思います。svn では trunk, branches, tags が普通のディレクトリとして扱われるのに対して git では tag, branch が組み込みになっているので、git(hub) の master = svn の trunk という風にするとよいかと。
git はローカルでいじってる間から適当に git init していって、公開したくなったら remote に push する、というのが RCS -> CVS の進化と似ている気がしています。