!!!gitのホスティングサービスを使う 最近、とあるプロジェクトでgitレポジトリのホスティングサービスを使うことになり、 立ち上げ作業を行ったのでそのメモ。 環境としては[msysgit|http://code.google.com/p/msysgit/]を想定する。 なお、筆者はgitにもSSHにもそれほど詳しくないので、この記事の信頼性は推して知るべし。 gitが使えるSCMサービスサイトの一覧は、英語だが、[GitHosting - Git SCM Wiki|https://git.wiki.kernel.org/index.php/GitHosting]にある。 また、gitに限らず様々なSCMサービスサイトの機能を比較した表が[Comparison of open source software hosting facilities - Wikipedia, the free encyclopedia|http://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities]にある。 この中でも、gitレポジトリのホスティングサービスといえば、[github|http://github.com/]や[gitorious|http://gitorious.org/]が有名だ。 これらは単純にレポジトリだけを提供するわけではなく、バグトラッカー等の付帯サービスも行っており、 プロジェクトポータルとしての役割も果たせるように工夫されている。 レポジトリのみを提供する老舗のサイトとしては、[repo.or.cz|http://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コマンドで作成出来る。 既に作成してある場合は新たに作る必要はない。 {{pre $ 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の内容は、以下のようなものだ。 {{pre ssh-rsa AAAAB3Nza(中略)vBoWl18Q== foo@foo.com }} これを丸ごと、フォームに入力しよう。 余計な改行が入ったりすると認証出来ないことも多いので、中身を厳密にコピーすること。 なお、repo.or.czでは個人アカウントにパスワードが存在しない。 代わりに、このSSH Keyで代用する。 !!レポジトリのエントリ(アカウント)の作成 各サイトで示される手順に従ってレポジトリを作成する。 大方のサイトでは、登録後、pushできるまでに至るための、gitコマンドが表示される。 !!レポジトリにpushできる人物の登録 各サイトで示される手順に従って、開発に参加する人物を登録する。 大方のサイトでは、(メールアドレスやSSH Keyではなく)個人アカウント名で登録することになるだろう。 !!レポジトリ構築 大方のサイトでは、レポジトリの操作を開始するためのgitコマンドの例が示されている。 その中で重要なのは、以下のような行だ。 {{pre $ git remote add origin ssh://repo.or.cz/srv/git/bar.git }} {{pre $ git remote add origin git@github.com:foo/bar.git }} この部分は、各サイトにより仕様が異なる。 また、変更した場合がよいこともある。 例えば、repo.or.czを使用する場合、筆者は以下のように変更している。 {{pre $ git remote add origin ssh://foo@repo.or.cz/srv/git/bar.git }} こうしないと、git push時に登録したアカウントであるfooではなく、OSのアカウント名が(デフォルトとして)使用され、認証に失敗する。他にも設定方法はあるのかもしれないが、筆者が軽く探した中では、このURLを修正する方法が最初に見つかった。 gitのマニュアルによれば、このgit remote addの行は、他にも以下のようなURLを取りうる。 {{pre 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を除けば同じようなものだ。 まず、以下のようにローカルに空のレポジトリを作成する。 {{pre mkdir foo cd foo git init }} これにファイルを追加し、pushすることでサイト上にレポジトリを構築する。 初期登録ファイルをこのディレクトリ(フォルダ)に保存し、それらのファイルに対してgit addを行い、 ローカルレポジトリでの管理ファイルとして登録する。 {{pre git add foo.c }} これをローカルにコミットする。 {{pre git commit -a -m "Initial commit." }} -mはコミットメッセージをコマンドラインから指定するオプション。 指定しない場合は、テキストエディタのvim(デフォルトでは)が起動して入力を求められる。 vimの使い方は、現代の一般的なテキストエディタとは''激しく違う''ので、知らなければググること。 次に、サイト上のgitリポジトリに対する名前を設定する。 {{pre $ git remote add origin ssh://foo@repo.or.cz/srv/git/foo.git }} これにより、いちいちURLを指定すること無く、リモートのレポジトリを参照できるようになる。 例えばリモートのmasterブランチを、origin/masterと表せるようになる。 最後に、pushする。 {{pre git push origin master }} 最初の一回は、以下のように聞かれる。 {{pre 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と回答。 {{pre Warning: Permanently added 'github.com,65.74.177.129' (RSA) to the list of known hosts. }} 「信頼できるホストに登録したよ」という警告。