2012年5月1日火曜日

GitHubの活用(アカウントの作成と設定)

GitHubとは

Gitを使えばローカルのコンピュータにリポジトリを作成することができ、バージョン管理をするだけならばGitだけで十分です。しかし、プログラミングをしていると、どうしても「他の人のソースコードを見たい」「自分のソースコードをオープンにして色々な人に見てもらいたい」などの要望が湧いてくるものです。それを叶えてくれるのがGitHubです。
名前の通り、Gitを使いGitHubのサーバ上で公開したり、GitHubで公開されている様々なプロジェクトのコピーを自分のコンピュータに保存したりすることができます。また、共同編集の設定をすることで特定の人との同じプロジェクトを共同開発することもできます。
GitHubの全ての機能は無料で利用することができます。無料プランでも有料プランでも、作成できるリポジトリの数は無制限ですが、無料プランの場合、使える領域が0.30GB(300MB)までとなっています。ですが、バイナリを管理しなければ特に困ることは無いでしょう。
無料プランと有料プランとの大きな違いは「インターネットで公開したくないプライベートなリポジトリが作れるか作れないか」です。無料プランではリポジトリを作成すると強制的にインターネットで公開されます。有料プランでは、料金によって幾つか非公開のプライベートなリポジトリを作成することができます。

それでは、GitHubの公式サイトにも書かれているように、以下のような順序で説明します。
  1. アカウントの作成
  2. 初期設定
  3. リポジトリの作成
  4. プロジェクトをフォーク
  5. 繋がる
  6. その他の設定


前提

  • Mac OS X(Lion)を使用しています
  • Gitがインストールされている必要があります

1. アカウントの作成

1-1. まずは「GitHub」にアクセスし、「Plans, Pricing and Signup」をクリックし、アカウントを作成します。

1-2. どのプランでアカウントを作るかを選択します。今回は無料プランを選択します。

1-3. 「Username」「Email Address」「Password」「Confirm Password」を入力し「Create an account」をクリックします。

1-4. 呆気無いですが、以上で完了です。

2. 初期設定

2-1. 続けて手順に従い設定をします。まずは「Set Up Git」でGitの設定をします。

2-2. 今回はMac OSなので自動的にMac OS用のページにリダイレクトします。Gitのインストールは完了しているので飛ばします。

2-3. 基本的にSSHを利用してGitHubとのやり取りを行うため、まずはSSHの鍵を作成します。お好みのターミナルを起動し、以下のコマンドを入力します。Mac OS X標準のコンソールは「アプリケーション > ユーティリティ > ターミナル.app」で起動できます。

2-3-1. SSH鍵の作成
$ mkdir ~/.ssh/github
$ ssh-keygen -t rsa -C "youremail@example.jp" -f ~/.ssh/github/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (任意のパスワード)
Enter same passphrase again: (確認のため再入力)
Your identification has been saved in /Users/YOURNAME/.ssh/github/id_rsa.
Your public key has been saved in /Users/YOURNAME/.ssh/github/id_rsa.pub.
The key fingerprint is:
00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff youremail@example.jp
The key's randomart image is:
+--[ RSA 2048]----+
|    + o.+.       |
|   . B.*.        |
|.   . +oo        |
|o.  . ..         |
|+E . . .S        |
|..+   .          |
| o .             |
|. +              |
|.. .             |
+-----------------+

2-3-2. すると、以下のような秘密鍵と公開鍵が出来上がります。
$ ls ~/.ssh/github
id_rsa          id_rsa.pub
$ cat ~/.ssh/github/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCd+t0ooWFXDrEFuRkLAoMJYralIRhClJ/WB499zJziIAazzPCJdWiri2S+p03OUl1CBH+zR3z0AbDsxEM+KROLE5dNusexwmEaeCFxqJI51XWs70rVpKw8BAs1UonB9ZDeHjSq7m4NHtyAp5MQqFv9zZ7g+oHrjVfe5ebz8SEL5dNVkGC0aHa+uCXAwzwEm3h6q9WLQ6tpaM5PzfY1atu2AiauC4pypecUjdzvIveYSbKc2k4UurO2q/6krjMJ+hDIOFfhGxYZRzzR51phnIW2w9vq6fCzeCRrIC/3k1UlhHBon6JUYc5qW9cz9qauuSO+ImHy3dPWxKww8Falnz2H youremail@example.jp
※非常に大事な情報なので、「id_rsa」の中身は絶対に誰にも公開しないようにしてください。

2-4. 生成したSSH鍵を登録します。「Account Settings > SH Keys > Add SSH key」をクリックし、出てきた「Key」に先ほどの「~/.ssh/github/id_rsa.pub」の中身全てをコピーして貼り付けます。スペルチェックされて赤くなっていますが、気にせずに「Add key」をクリックします。
「Account Settings」をクリック
「Add SSH key」をクリック
「id_rsa_github.pub」をそのまま貼り付け

2-5. パスワードの入力を求められるので、1-3で決めたGitHubアカウントのパスワードを入力して「Confirm password」をクリックします。無事登録されていればSSH鍵の登録は完了です。
GitHubのアカウント情報を入力
追加されていれば完了

2-6. では、正しく登録されたかを確認します。ターミナルで以下のコマンドを実行します。
$ ssh -T git@github.com -i ~/.ssh/github/id_rsa
The authenticity of host 'github.com (207.97.227.239)' 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)? yes  (「yes」と入力します)
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Identity added: /Users/YOURNAME/.ssh/github/id_rsa (/Users/YOURNAME/.ssh/github/id_rsa)
Hi uqtimes! You've successfully authenticated, but GitHub does not provide shell access.

途中でキーチェーンアクセスによりパスワードの入力を促されます。その際にはGitHubのアカウントではなく、2-3-1でSSH鍵を作るときに入力したパスワードを入力します。今後も入力する必要があるので、「パスワードをキーチェンに保存」にチェックし、「OK」をクリックします。

2-7. sshコマンドは引数に何も指定しないと、通常「~/.ssh/id_rsa」のSSH鍵が使われます。そのため、github.comにアクセスする際に毎回「$ ssh -T git@github.com -i ~/.ssh/github/id_rsa」と入力する必要があり面倒です。そのため、github.comにアクセスする際には、常に「~/.ssh/github/id_rsa」を使うように設定します。
$ vim ~/.ssh/config
Host github.com
        IdentityFile ~/.ssh/github/id_rsa

以下のコマンドでも接続成功すれば大丈夫です。
$ ssh -T git@github.com
Hi uqtimes! You've successfully authenticated, but GitHub does not provide shell access.

2-8. 誰がコミットしたか分かるように、名前やメールアドレスを記録するのですがその設定をします。
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "youremail@example.jp"
ついでにエディタや色付けもします。
$ git config --global core.editor vim
$ git config --global color.ui auto
もしリポジトリ毎に設定を分けたい場合は、以下のようにリポジトリ毎に設定します。
$ cd my_other_repo (設定したいリポジトリに移動します)
$ git config user.name "Different Name"
$ git config user.email "different.youremail@example.jp"
$ git config color.ui auto
現在の設定を参照するときは以下のコマンドを実行します。
$ git config --list
user.name=Firstname Lastname
user.email=youremail@example.jp
color.diff=auto
color.status=auto
color.branch=auto
color.ui=auto

以上で設定は完了です。

3. リポジトリの作成

3-1. まずはGitHubにリモートリポジトリを作成します。「Create a New Repo」をクリックし、作成を開始します。

3-2. 「Repository name」「Description」を入力し、「Create repository」をクリックします。作成されればGitHubでの作成は完了です。

3-3. では、作られたリポジトリにREADMEファイルを追加してみます。GitHubでは、READMEの中身を自動的に解析し、リポジトリのトップページにREADMEの中身を表示してくれます。リポジトリを訪れた人がわざわざREADMEをチェックせずともどのようなリポジトリであるかが分かるということになっています。どのようなマークアップ言語が使えるかは「GitHub Markup」を見ると詳しく書かれています。
$ mkdir -p ~/github/uqtimes/first-repository
$ cd ~/github/uqtimes/first-repository
$ git init
Initialized empty Git repository in /Users/YOURNAME/github/uqtimes/first-repository/.git/
$ echo 'Hello World' > README
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       README
nothing added to commit but untracked files present (use "git add" to track)
(ファイルを作成しただけで、ステージに反映していないため「Untracked」)

$ git diff
(ステージとの差分は無いため何も出力されない)

3-4. 変更点をステージに反映
$ git add README
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#
#       new file:   README
#
(ステージに反映されたので、メッセージが変更された)

$ git diff
(ステージとの差分は無いため何も出力されない)

$ git diff --cached  (もしくはgit diff --staged)
diff --git a/README b/README
new file mode 100644
index 0000000..5fc8b8d
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+Hello World
(ステージとリポジトリの差分が出力される)

3-5. リポジトリにコミット
$ git commit -m 'first commit'
[master (root-commit) a5e0689] first-commit
 1 file changed, 1 insertion(+)
 create mode 100644 README
$ git status
# On branch master
nothing to commit (working directory clean)
(変更されているものは何もない)

$ git diff
(ワーキングディレクトリとステージとの差分なし)

$ git status
(ステージとリポジトリとの差分なし)

$ git log
commit a5e0689bd238440a0429f235587799cccc45aff6
Author: Firstname Lastname
Date:   Tue May 1 02:55:15 2012 +0900

    first-commit

3-5. 最終的な変更点をGitHubにプッシュする
$ git remote add origin git@github.com:uqtimes/first-repository.git
$ git remote -v
origin  git@github.com:uqtimes/first-repository.git (fetch)
origin  git@github.com:uqtimes/first-repository.git (push)
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 222 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:uqtimes/first-repository.git
 * [new branch]      master -> master

※ 「git remote add origin git@github.com:uqtimes/first-repository.git」について
「git remote add」は、リモートリポジトリのURLの名前を決めてあげるものです。
今回の例では「git@github.com:uqtimes/first-repository.git」のURLにあるリポジトリに「origin」という名前を付けるということです。Subversion等の中央集権型と異なり、Gitでは複数のリポジトリとのマージも考えられており、複数のサーバとやり取りすることがあります。そのため、いちいちサーバ名をURLで指定していては面倒なので、名前をつけるようになっています。なお、Gitではリモートリポジトリは「origin」という名前をデフォルトとして扱うため今回のように「origin」と指定するのが一般的です。

※ 「git push origin master」について
「master」とは、Subversionでのtrunkのようなものです。つまり、このコマンドは「ローカルリポジトリのmasterをリモートリポジトリのorigin(git@github.com:uqtimes/first-repository.git)に反映せよ」ということです。

4. プロジェクトのフォーク

4-1. フォークとは他の人のリポジトリを元にして自分のリポジトリにコピーするものです。GitHubにはフォーク用のリポジトリが用意されているのでフォークしてみましょう。まずは、「Spoon-Knife」というプロジェクトに移動し、「Fork」をクリックします。

4-2. すると、すぐに自分のリポジトリにも全く同じリポジトリが作成されます。

4-3. では、フォークしたリポジトリを自分のコンピュータにコピーします。
$ cd ~/github/uqtimes
$ git clone git@github.com:uqtimes/Spoon-Knife.git
Cloning into 'Spoon-Knife'...
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 24 (delta 7), reused 17 (delta 1)
Receiving objects: 100% (24/24), 74.36 KiB | 77 KiB/s, done.
Resolving deltas: 100% (7/7), done.
$ cd Spoon-Knife
$ ls
README          forkit.gif      index.html

4-4. フォーク元のリポジトリをupstreamとして定義します。
$ git remote add upstream git://github.com/octocat/Spoon-Knife.git
$ git remote -v
origin  git@github.com:uqtimes/Spoon-Knife.git (fetch)
origin  git@github.com:uqtimes/Spoon-Knife.git (push)
upstream        git://github.com/octocat/Spoon-Knife.git (fetch)
upstream        git://github.com/octocat/Spoon-Knife.git (push)

4-5. 変更点をリモートリポジトリから取得し、マージします。
$ git fetch upstream
From git://github.com/octocat/Spoon-Knife
 * [new branch]      master     -> upstream/master
$ git merge upstream/master
Everything up-to-date
(フォークした直後なので実際には変更点はないはずです。)

※「git remote add upstream git://github.com/octocat/Spoon-Knife.git」について
先程も説明した通り「git remote add」はサーバ名を定義するものです。今回は、フェッチ元のリモートリポジトリ(git://github.com/octocat/Spoon-Knife.git)とフェッチ後のリモートリポジトリ(git@github.com:uqtimes/Spoon-Knife.git)とは異なるものなので、名前を「upstream」と「origin」とに分けています。

※「git pull」と「git fetch + git merge」の違いについて
「git pull = git fetch + git tmerge」のようなものです。「git pull」はリモートリポジトリからコンテンツを取得し、変更点を自動的にマージします。一方「git fetch」はリモートリポジトリからコンテンツ取得してリモートリポジトリに反映するだけで、マージするために「git merge」コマンドを実行します。ローカルリポジトリだけが最新のものになるというのは大事な事で、手元にあるファイル(まだ自分が編集中の場合もある)とfetchした後のファイルの差分をチェックし、マージする価値がなければマージしなくて済みます。

4-6. リポジトリの削除は、リポジトリの「Admin」をクリックし、ページ下にある「Delete this repository」をクリックすることで削除の確認がでます。そこでリポジトリの名前を入力します。今回は「uqtimes/Spoon-Knife」と入力し「I understand the consequences, delete this repository」をクリックすることで削除されます。なお、この操作はもとに戻すことができないので要注意です。
削除は「Danger Zone」にあります
確認のためレポジトリ名を入力する必要があります
削除完了です

5. 繋がる

「繋がる」とどうなるかですが、「気になるリポジトリを多く持っている人」や、「フォローするまではないけどその人の特定のリポジトリの経過を追いたい」などの場合に、変更を知ることができます。
5-1. まずは繋がる人を探すわけですが、「Be Social」に書かれているGitHub, Inc.のCTOである「Tom Preston-Werner氏」を例にします。
立派なヒゲが格好良いです

5-2. 次に「Follow」をクリックします。手順はたったこれだけです。
まだフォローしていません
フォローすると表示が変わります

5-3. すると、自分のプロフィール欄にフォローしているユーザやリポジトリの情報が表示されるようになります。
「view all →」をクリックした結果

6. その他の設定

6-1. アバターの設定
GitHubのアバターは「Gravatar」というサービスを利用しています。そのため、GitHubだけではアバターの設定ができません。逆に、一度Gravatarに登録してしまえば(対応しているサービスでは)、何度も設定せずとも同じアバターが使えるということです。
それでは「Gravatarに登録!」をクリックします。

6-2. 「メールアドレス」を入力して「登録」をクリックします。
Gravatarへの登録
確認メールが送信されます

6-3. メールが送られてくるのでURLをクリックし、「ユーザ名」「パスワード」「パスワード(再度入力)」を入力し「登録」をクリックします。
書かれているリンクをクリックします
アカウント情報を入力します

6-4. 登録が完了したので、画像を選択します。
画像を追加します
お好みのものを選択してください
ファイルを追加ます

矢印が指している箇所をドラッグするとトリミングができます
GitHubに表示するために、レーティングを「G」にする必要があります
反映されたことを確認します

以上の方法で、5-10分ほど待つと、GitHubのアイコンが変更されます。いくら待っても反映されない場合は、ブラウザのキャッシュをクリアしてみてください。

0 コメント:

コメントを投稿