トップ 検索 一覧 差分 ソース ヘルプ RSS ログイン

gitのホスティングサービスを使う

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レポジトリのホスティングサービスといえば、githubgitoriousが有名だ。これらは単純にレポジトリだけを提供するわけではなく、バグトラッカー等の付帯サービスも行っており、プロジェクトポータルとしての役割も果たせるように工夫されている。レポジトリのみを提供する老舗のサイトとしては、repo.or.czが草分けだ。他にもsourceforgeを初め、多くのサイトがsvnだけでなく、gitも選択できるようになってきている。

この記事では今回試したgithubとrepo.or.czを基準に語るが、他でも大体同じだろう。

 大まかな流れ

各サイトで細かな違いは様々にあるものの、大まかな流れは似ている。

  1. 個人アカウント用のSSH Keyを作成する(ローカル作業)。
  2. 個人のアカウントを作成する。
  3. 個人アカウントにSSH Keyを登録する。
  4. レポジトリのエントリ(アカウント)を作成する。
  5. レポジトリに最初のpushを行う。
  6. レポジトリに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秒