なんとなくGitを始めようと思ってGitHubに登録したり色々と設定したのでその経緯を忘れないうちに書いておく。
Gitとはバージョン管理システムで、リポジトリと呼ばれる保管庫に更新したプロジェクトのファイルをどんどん追加(コミット)していく。更新履歴を残すことによって後から巻き戻したり管理するのが容易になるというわけである。リポジトリにはローカルリポジトリとリモートリポジトリがあり、ローカルリポジトリはそのままローカルでプロジェクトを管理していく。リモートリポジトリはどこか別のネットワーク上でプロジェクトを管理していく。GitHubはリモートリポジトリとして使えるサービスの一つ。GitHubでプロジェクトを管理することによってどのPCからでもプロジェクトを管理できるので便利。始めはファイルサーバーのようなものと考えればわかりやすい。他にもGitHubには自分だけでなく誰かが自分のプロジェクトをコピーして変更したり、自分が誰かのプロジェクトに加わることもできる。というかそれが目玉のサービスにようだが、今は一旦置いておく。
Gitをインストール
まず、GitHubを使うにはGitHubに登録して、Gitをインストールする必要がある。今回使ったOSはLinux(Ubuntu14.04)とWindows。WindowsはGitHub for Windowsを使えばGUIで色々操作できたり、Gitが入ったターミナルまで用意してくれたり、GitHubに接続するためのsshのkeyまで作成してくれて至れり尽くせりなのでこれを使う。これを使わないならLinuxを使ったほうが楽だと思う。Ubuntuはターミナルに次のコマンドを入力してインストール。
sudo apt-get install git
Gitの初期設定
Gitをインストールしたら、まずユーザー名とメールアドレスを設定する。ユーザー名はコミットした時などに使われる。メールアドレスはGitHubで登録したものと同じものを設定する。次のコマンドを実行する。
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス(GitHubで登録したものと同じ)"
ついでに次のようなコマンドも実行するとGitのターミナルの出力に色づけするようになるので設定しておくといいらしい。
git config --global color.ui true
設定した内容はgit config -lで見ることができる。
ローカルリポジトリの作成
とりあえずローカルでGitを使ってみる。まず始めに、Gitを使う時の流れをおさえておく。
- 作業ディレクトリでファイルを作ったり修正したりする。
- そのファイルをステージングエリアに加える。
- ステージングエリアに加えたファイルをコミットする。
コミットすることでファイルがデータベースに追加されて、後々修正を加えてもまた元に戻ったりすることができるというわけである。
まず、プロジェクトの作業ディレクトリを作成する。ここではホームディレクトリにHelloという名前で作ってみる。
mkdir ~/Hello
cd ~/Hello
Helloディレクトリをリポジトリとして使うには次のコマンドを実行する。
git init
これでHelloディレクトリはGitディレクトリになり、以後ローカルリポジトリとして使えるようになる。
次に、「Hello!」という内容のHello.txtファイルを作ったと仮定して、このHello.txtファイルを次のコマンドでステージングエリアに加える。コミットするにはでステージングエリアを経由する必要がある。
git add Hello.txt
これでHello.txtはコミットできるようになる。コミットするには次のコマンドを実行する。
git commit -m "初めてのコミット"
こうすることによって、Hello.txtファイルを後で修正し再びコミットしても、今コミットした「Hello!」という内容の状態に戻ることができる。ちなみにこの「-m」というのはメッセージを追加するオプションで「”初めてのコミット”」というのがメッセージである。後で見た時になぜコミットしたのか、どこを変更したのかなどわかるようなメッセージにする。
ローカルでGitを使ってみたが、GitHubでも同じような感じで管理する。次はGitHubのリモートリポジトリを使ってみる。その前にGitHubとはSSHで接続する必要があるため、まずSSH鍵を作る必要がある。
SSH鍵の作成と設定
まずSSH鍵を作る前に公開鍵暗号方式についてさらっと説明。公開鍵暗号方式には公開鍵と秘密鍵があり、公開鍵で暗号化、秘密鍵で復号化する。秘密鍵は自分だけの秘密にしておき、公開鍵は通信相手に渡す。通信相手は渡された公開鍵を使ってデータを暗号化し、そのデータを自分だけ持っている秘密鍵で復号化することによって通信のセキュリティを高めるというわけである。ここでは、GitHubに公開鍵を渡す。
SSH鍵は次のコマンドで作成する。
ssh-keygen -t rsa -C "任意のコメント(メールアドレスなど)"
「-t」というオプションでrsaという鍵のタイプを指定する。「-C」というのはコメントをつけるオプションで任意のコメント(メールアドレスなど)をつける。。コマンドを実行すると
Enter file in which to save the key (/home/ユーザー名/.ssh/id_rsa):
と表示されるのでEnterを押す。次にパスフレーズ(パスワードのようなもの)を聞かれるので適当なパスフレーズを入力する。確認でもう1回同じパスフレーズを入力する。こうして鍵が作成される。作成された鍵はホームディレクトリの.sshディレクトリ内にあるので.sshに移動する。ls
コマンドで中身を見るとid_rsaとid_rsa.pubというファイルがある。id_rsaというのが秘密鍵でid_rsa.pubが公開鍵である。つまり、id_rsa.pubの中身をGitHubに渡す。
id_rsa.pubの中身は次のように表示してクリップボードにコピーする。
cat ~/.ssh/id_rsa.pub
# 表示された内容をctrl+shift+cか右クリックでクリップボードにコピー
GitHubのSSHkeysに行き「Add SSH key」をクリックし、適当なタイトルをつけて「key」にコピーした内容を貼り付け「Add key」をクリックしてGitHubのパスワードを入力する。これでGitHubとSSHで通信できるようになる。正しく通信できているかは次のコマンドを打つことによって確かめられる。
ssh -T git@github.com
SSHで通信していいか確認が入るので「yes」と入力し、次にパスフレーズが聞かれるのでパスフレーズを入力する。以下のメッセージが表示されたらGitHubと正常にSSH通信できている。
Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.
これでようやくGitHubと通信できるようになった。もし通信に失敗しているようであれば、もう一回鍵を作りなおすところから始めるかGenerating SSH Keysを参照。次はGitHubのリモートリポジトリにpushしてみる。
GitHubのリポジトリにpushする。
始めにGitHubにリポジトリを作成する。トップページにある「+ New repository」ボタンをクリックして適当なプロジェクト名と適当な説明を入力して「Create repository」ボタンをクリックする。ここでは先ほどローカルに作成したHelloプロジェクトを作成したと仮定する。ちなみにGitHubの無料プランはプロジェクトを非公開にすることはできない。
試しに先ほどローカルで作ったHelloプロジェクトをGitHubのリポジトリにpushしてみる。まずGitHubのリモートリポジトリにSSHで接続するための設定を追加する。
git remote add origin git@github.com:"GitHubのユーザー名"/Hello.git
originというのはリモートリポジトリのあるサーバー名に接続方式を加えたリモート名(ここではgit@github:"GitHubのユーザー名"/Hello.git
)である。ドメインを省略したようなものと捉えるとわかりやすい。別にoriginではなく別の名前を使ってもいいが、デフォルトはoriginなのでここではoriginという名前にしておく。ちなみにSSL(https)で接続するための設定も追加できる。
git remote add origin2 https://github.com/"GitHubのユーザー名"/Hello.git
SSLだとpushするたびにユーザー名とパスワードを聞かれて面倒くさい。キャッシュを使う方法もあるが、基本的にSSLで接続する。ちなみにここではリモート名にorigin2という名称を与えている。
pushするには次のコマンドを実行する。
git push origin master
originは先ほど設定したリモート名なのでSSL接続でGitHubのHelloプロジェクトにpushしたということになる。masterというのはブランチ名で、ブランチというのはプロジェクトの中で履歴の分岐を記録するための機能。別のサイトに簡単な説明と公式サイトに詳しい説明が書いてある。GitHubの自分のページに行ってみるとHello.txtがpushされたのを確認できる。感動。大体こんな感じでリモートリポジトリでプロジェクトを管理していける。
リポジトリを削除する。
一応GitHubのリモートリポジトリを削除する方法も書いておく。まず、削除したいリポジトリのページに行き右側にある「settings」の項をクリックして、下にある「Danger Zone」にある「Delete this repository」ボタンをクリックする。削除したいリポジトリ名を聞かれるので入力して削除する。
以上、長々とまとまりなく書いてしまったが、大体の流れを掴めれば後はgitのコマンドを調べたり公式サイトを見ながらやっていけると思う。ちなみにGit公式にあるProGitという本が自分のような初心者でも非常にわかりやすく書いてあるので、これからProGitを見ながら色々と弄っていきたい。