gitのホスティングサービスを使う
最近、とあるプロジェクトでgitレポジトリのホスティングサービスを使うことになり、立ち上げ作業を行ったのでそのメモ。環境としてはmsysgitを想定する。なお、筆者はgitにもSSHにもそれほど詳しくないので、この記事の信頼性は推して知るべし。
gitが使えるSCMサービスサイトの一覧は、英語だが、GitHosting - Git SCM Wikiにある。また、gitに限らず様々なSCMサービスサイトの機能を比較した表がComparison of open source software hosting facilities - Wikipedia, the free encyclopediaにある。
この中でも、gitレポジトリのホスティングサービスといえば、githubやgitoriousが有名だ。これらは単純にレポジトリだけを提供するわけではなく、バグトラッカー等の付帯サービスも行っており、プロジェクトポータルとしての役割も果たせるように工夫されている。レポジトリのみを提供する老舗のサイトとしては、repo.or.czが草分けだ。他にもsourceforgeを初め、多くのサイトがsvnだけでなく、gitも選択できるようになってきている。
この記事では今回試したgithubとrepo.or.czを基準に語るが、他でも大体同じだろう。
大まかな流れ
各サイトで細かな違いは様々にあるものの、大まかな流れは似ている。
- 個人アカウント用のSSH Keyを作成する(ローカル作業)。
- 個人のアカウントを作成する。
- 個人アカウントにSSH Keyを登録する。
- レポジトリのエントリ(アカウント)を作成する。
- レポジトリに最初のpushを行う。
- レポジトリにpushできる人物を登録する。
既存のレポジトリに対しpush権を得るだけなら、SSH Keyの作成と個人アカウントの登録だけでよい。あとはレポジトリの管理者に登録を依頼し、通常通りgit cloneしよう。
githubはどうやらレポジトリを個人の持ち物とするらしく、個人アカウントを作成しなければレポジトリを作成出来ないし、個人アカウントを削除するとレポジトリも削除される。repo.or.czはレポジトリは個人から独立しており、個人アカウントを作成せずともレポジトリを作成できる。ただし、個人アカウントを作成しなければpushができない。
個人的にはrepo.or.czの方が望ましいスタイルだと思う。複数人で開発してこそgitの恩恵があるのだし、プロジェクトの創始者は一人とも限らない。創始者が退陣しても、他の開発者に移譲しやすいのはrepo.or.czの方式だ。
個人アカウント用のSSH Keyの作成(ローカル作業)
gitホスティングサービスは、認証にSSHを使う場合が多く、そのためにはSSH Keyを作成しなければならない。msysgitにはSSHが含まれているので、ssh-keygenコマンドで作成出来る。既に作成してある場合は新たに作る必要はない。
$ ssh-keygen -t rsa -C "foo@foo.com" Generating public/private rsa key pair. Enter file in which to save the key (/home/foo/.ssh/id_rsa): Created directory '/home/foo/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/foo/.ssh/id_rsa. Your public key has been saved in /home/foo/.ssh/id_rsa.pub. The key fingerprint is: a5:6f:dd:b0:ee:ca:88:fc:ed:3a:c5:8f:32:e7:08:5b foo@foo.com
SSH Keyは使いまわせるので、最初の保存パスはデフォルトのままEnterでいいだろう。次のpasshphraseは、pushその他のリモートへのアクセス時に聞かれることになるパスワードを入力する。入力せずにEnterすれば「パスワード無し」も可能だが、推奨されない。パスワードの確認入力を済ませれば、~/.sshにSSH Keyが記されたファイルが保存される。
使用時に毎回パスワードを入力せずに済む方法があるらしいが、今回は割愛する。
個人アカウントの作成
各サイトで示される手順に従って個人アカウントを作成する。
githubではコミットのauthorとしてWeb上に表示されるのは、このアカウント名になる。個人アカウントのプロフィールページにはNameを登録する欄があるが、これはauthorの表記には使用されない。また、ローカルレポジトリにgit configコマンド等で登録したuser情報も表示されない。何か設定する方法があるのかも知れないが、短時間内には見つけられなかった。
repo.or.czではgit configコマンドでの登録内容で表示される。個人的にはコチラのほうが好みだ。
個人アカウントにSSH Keyを登録
個人アカウントの作成時、または作成後、SSH Keyの登録を促される。ここでは、前項の手順で作成された、~/.ssh/id_rsa.pubの中身をSSHの公開鍵として登録する。
id_rsa.pubの内容は、以下のようなものだ。
ssh-rsa AAAAB3Nza(中略)vBoWl18Q== foo@foo.com
これを丸ごと、フォームに入力しよう。余計な改行が入ったりすると認証出来ないことも多いので、中身を厳密にコピーすること。
なお、repo.or.czでは個人アカウントにパスワードが存在しない。代わりに、このSSH Keyで代用する。
レポジトリのエントリ(アカウント)の作成
各サイトで示される手順に従ってレポジトリを作成する。大方のサイトでは、登録後、pushできるまでに至るための、gitコマンドが表示される。
レポジトリにpushできる人物の登録
各サイトで示される手順に従って、開発に参加する人物を登録する。大方のサイトでは、(メールアドレスやSSH Keyではなく)個人アカウント名で登録することになるだろう。
レポジトリ構築
大方のサイトでは、レポジトリの操作を開始するためのgitコマンドの例が示されている。
その中で重要なのは、以下のような行だ。
$ git remote add origin ssh://repo.or.cz/srv/git/bar.git
$ git remote add origin git@github.com:foo/bar.git
この部分は、各サイトにより仕様が異なる。また、変更した場合がよいこともある。
例えば、repo.or.czを使用する場合、筆者は以下のように変更している。
$ git remote add origin ssh://foo@repo.or.cz/srv/git/bar.git
こうしないと、git push時に登録したアカウントであるfooではなく、OSのアカウント名が(デフォルトとして)使用され、認証に失敗する。他にも設定方法はあるのかもしれないが、筆者が軽く探した中では、このURLを修正する方法が最初に見つかった。
gitのマニュアルによれば、このgit remote addの行は、他にも以下のようなURLを取りうる。
ssh://[user@]host.xz[:port]/path/to/repo.git/ git://host.xz[:port]/path/to/repo.git/ http[s]://host.xz[:port]/path/to/repo.git/ ftp[s]://host.xz[:port]/path/to/repo.git/ rsync://host.xz/path/to/repo.git/
最初のpushまで
どのサイトでも、上記のgit remoteを除けば同じようなものだ。
まず、以下のようにローカルに空のレポジトリを作成する。
mkdir foo cd foo git init
これにファイルを追加し、pushすることでサイト上にレポジトリを構築する。
初期登録ファイルをこのディレクトリ(フォルダ)に保存し、それらのファイルに対してgit addを行い、ローカルレポジトリでの管理ファイルとして登録する。
git add foo.c
これをローカルにコミットする。
git commit -a -m "Initial commit."
-mはコミットメッセージをコマンドラインから指定するオプション。指定しない場合は、テキストエディタのvim(デフォルトでは)が起動して入力を求められる。vimの使い方は、現代の一般的なテキストエディタとは激しく違うので、知らなければググること。
次に、サイト上のgitリポジトリに対する名前を設定する。
$ git remote add origin ssh://foo@repo.or.cz/srv/git/foo.git
これにより、いちいちURLを指定すること無く、リモートのレポジトリを参照できるようになる。例えばリモートのmasterブランチを、origin/masterと表せるようになる。
最後に、pushする。
git push origin master
最初の一回は、以下のように聞かれる。
The authenticity of host 'github.com (65.74.177.129)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?
これは「github.comが信頼できるかわからん」どうたらということらしい。yesと回答。
Warning: Permanently added 'github.com,65.74.177.129' (RSA) to the list of known hosts.
「信頼できるホストに登録したよ」という警告。
最終更新時間:2010年05月28日 22時14分43秒