トップ 検索 一覧 ヘルプ RSS ログイン

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

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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 rempte addの行は、他にも以下のような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.
}}
「信頼できるホストに登録したよ」という警告。