Git初心者がクラスメイトに使い方を講義してみる


## はじめに

このドキュメントを書いている私が自身がGit初心者であるため、間違っている点があるかと思いますのでご了承お願い致します。

## 講義内容
1. Gitってなんぞ
2. 用語説明
3. とりあえずローカルで使ってみる
4. 複数人で使ってみる
5. ホスティングサービス紹介
6. 最後に

## 1. Gitってなんぞ
最近注目のバージョン管理システムです。
バージョン管理システムと言えば「Subversion」や「CVS」が有名ですがどう違うのかをあわせて見て行きましょう。

### ソースコードのバージョン管理
バージョン管理システムという名前からわかる通り、
Gitを使うことでソースコードのバージョンを管理することができます。
また、変更の履歴の確認などを簡単に確認することができます。
##### バージョン管理なら、プロジェクトのフォルダをコピーしておけばできるじゃん！
と思われた方もいるかもしれません。
ですが、この方法では、変更していないファイルもバックアップしてしまい、HDの容量圧迫に繋がってしまします。 
GtやSubversion等のバージョン管理システムは、前回からの変更点のみを保存するので無駄なバックアップを減らすことができます。

### 複数人でのソースコード共有
バージョン管理システムでは、ソースコードを管理できる他にも、
複数人でソースコードを共有できるというメリットもあります。

複数人で作業をしてると、自分の変更をチームメンバーに渡したい事があると思います。
そんな時に、USBメモリーやメッセンジャー等でやり取りをしていると作業に無駄が出てしまいますよね？
Gitを使えばその手間を減らすことができるのです。

### 分散型バージョン管理システム

Subversion等のシステムは集中型バージョン管理システムを採用していますが、
Gitでは分散型バージョン管理システムを採用しています。

集中型とは、リポジトリと呼ばれる「変更データを保存しておく領域」が１つで、
開発者全員が同じリポジトリを参照して作業をします。

分散型では開発者全員が参照できるリポジトリの他に、開発者一人ひとりが専用リポジトリを持っていて、
必要になったら大本のリポジトリに変更を反映させたり、変更を取得したりできます。


## 2. 用語説明

#### リポジトリ( repository )
コードの差分を保存しておく領域

--
#### ステージ( stage )
次回のコミットで含めるという宣言のこと。

---
#### コミット( commit )
ステージされた変更をリポジトリに反映させること。

---
#### プッシュ( push )
コミットをリモートリポジトリに反映させること。
プッシュしていないコミットはリモートリポジトリには反映されていないので注意してください。

---
#### プル( pull )
リモートリポジトリから変更を取得すること。

---
#### マージ( marge )
変更データを現在のデータと合わせること。
変更が競合した場合など手動で行うこともあります。

---
#### クローン( clone )
リモートリポジトリから、リポジトリをローカルに取得すること。


## 3. とりあえずローカルで使ってみる

#### 今回使用するもの
[TortoiseGit](https://code.google.com/p/tortoisegit/wiki/Download?tm=2)
[mysysgit](https://code.google.com/p/msysgit/downloads/list)

### 1. まずはリポジトリを作ってみる
`C:\Users\ユーザ名\Documents\Git\hoge`というフォルダで作業をしていきます。
フォルダがない場合は新規作成から作ってください。

リポジトリの作成は簡単です。
フォルダ内で右クリックを押し Git Create repository here… をクリックします。
![右クリックメニュー](https://www.evernote.com/shard/s289/sh/b8733a74-1705-4880-989c-aa89eaef5c3d/7e1ed3fa77aa08c71b6b35aeb02fe3b7/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:07%20PM.jpg)

以下の様なウィンドウが開きますがそのまま　OK　をクリックします
![bare init](https://www.evernote.com/shard/s289/sh/224d5f28-db19-4483-834f-184cf58491b8/546afe7d3e223ddb2419297de360a44b/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:09%20PM.jpg)

Gitリポジトリを作りました的なダイアログが出るので　OK　をクリック
![finish](https://www.evernote.com/shard/s289/sh/97ecf7a4-b369-41da-aeea-94d39a59f35d/f70bcb866c744dce0295a73d8c69aea2/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:11%20PM.jpg)
 
これでリポジトリの作成が終わりました。

### 2. ファイルを追加してステージする
次は、テキストファイルを作成してステージしてみます。
私は Hoge.txt というファイルの中に、

```Hoge.txt
hogehoge
hogehogehoge
```
と書き込み保存しました。

それでは、ステージしてみましょう。
フォルダ内の適当な場所を右クリックして、TortoiseGit > Add　を選択します

![add](https://www.evernote.com/shard/s289/sh/bfd9943d-969b-40d6-a1cb-2338761fee7b/6334fb464df5f1ba75ed644dc246f563/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:17%20PM.jpg)

すると、ウィンドウが出てくるので　Select/deselect all にチェックを入れて　OK　をクリックします。

![add select](https://www.evernote.com/shard/s289/sh/e7d3678c-bf16-4f7c-860a-4619bcf4b23e/93fdb2b17210db2e59be7730392bc462/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:18%20PM.jpg)

ステージ完了のダイアログが出てくるので　OK　を押して閉じましょう。

![add finish](https://www.evernote.com/shard/s289/sh/c76dbd5d-cd9d-4f89-b900-09600e7ab0c9/1ba800aead2cc39855c337e380efe125/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:20%20PM.jpg)

これで Hoge.txt をステージすることができました。


### 3. ステージしたファイルをコミットする
次はコミットです。

フォルダ内の適当な場所で右クリックして Git Commit -> "master"… を選択します
![commit](https://www.evernote.com/shard/s289/sh/9183f82a-e5cb-46a7-b0a1-b4519b59e96a/2361fd746db476722816216709024d3a/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:21%20PM.jpg)

なんか出て来ました。
![profile](https://www.evernote.com/shard/s289/sh/0d3138de-fd83-4853-bc9d-da0a4ead120a/8d4a45531635f218a227ba6ede8caa8c/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:21%20PM.jpg)

自分の名前を登録しいなかったので、文句を言われてます。
仕方ないので、Yesをおして登録してあげましょう

User InfoのName,Emailを入力（今回は適当でもいい）してOKを押します。

![Setting](https://www.evernote.com/shard/s289/sh/4005f340-5e31-446e-abd9-5c1df855a409/a406d604098dafa2ea8f83565e07da0b/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:23%20PM.jpg)

OKを押すと、コミット画面が出現します。
Messageにどんな変更をしたコミットなのかの説明を書きます。
Set commit dateと、Set authorにはチェックを入れておくといいかも。

![commit edit](https://www.evernote.com/shard/s289/sh/bef28ad6-275a-4ae0-8a22-a5e3b443d0ec/1531e55db9217746e5533063811b30bc/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:24%20PM.jpg)

メッセージの入力が終わったら、OKボタンを押します。
以下の様なダイアログが出現し、 Success というメッセージが出たらコミット完了です。
closeを押すとダイアログが消えます。

![commit finish](https://www.evernote.com/shard/s289/sh/71156666-afd4-4f90-b1d4-5af2f7ca6338/c101fa9991716e00104b70b030c749a1/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:25%20PM.jpg)


### 4. ログを確認する
最後に、きちんとコミットできているか、ログを確認してみましょう。

フォルダ内の適当な場所で右クリックして TortoiseGit > Show log を選択します。

![showlog](https://www.evernote.com/shard/s289/sh/5596ff9b-ed8b-4c55-9a93-418fe5f2b796/85ece90d446fc9f771420c72c592661b/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:27%20PM.jpg)

すると、 以下の様な画面が出てきます。
先ほどのコミットのログがあればコミット成功の証です。

![showlog window](https://www.evernote.com/shard/s289/sh/f11fec20-e01d-47ad-85e3-f9dfa9cefcae/695dcc3a9d873b3b5d85229447a943b5/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%204:28%20PM.jpg)

こんな感じの作業を繰り返して開発することで、バージョン管理を行う事ができます。

## 4. 複数人で使ってみる
１人で制作する場合は先程のやり方で良いのですが、複数人で作業を行う場合追加でやらなければいけないことがありますので、順を追って見て行きましょう。

その前に、どうやって複数人で使うのかを見てみましょう。
共通のリポジトリを１つ作成して、そこに個人がPushして変更を反映させ、Pullで変更を取得していきます。
![](https://www.evernote.com/shard/s289/sh/d8f216e6-ad75-4a59-bd24-fe81dec31e65/0421da24a1c6f4ce802625d6f00b09e0/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/15/13%202:15%20AM.jpg)

今回は、GitHubというサービスを使用して擬似的に複数人での開発を再現しようと思います。

以下のURLが今回使用するリポジトリのURLです。
GitHub: [School](https://github.com/rytmrt/school.git)

### 1. GitHubからリポジトリをクローンする

今回はリポジトリを作成するのではなく、既存のリポジトリをローカルにコピーして使います。

先ほどの Git フォルダ内の適当な場所を右クリックして Git Clone… を選択します。
![git clone](https://www.evernote.com/shard/s289/sh/ab484cd1-ec85-4571-a985-3b11e2c9b2c5/2ae76995c01cae873fe7bb344b4c1935/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%208:52%20PM.jpg)

URL欄に https://github.com/rytmrt/school.git を入力します。
Load Putty Keyは今回は使用しないので、チェックを外しておきます。
必要項目が終わったら、OKを押します。

![clone](https://www.evernote.com/shard/s289/sh/2ffd3ed0-aeec-4a71-b817-dc441b2fcc98/d89df310d98ccc03627327da536dc788/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%208:53%20PM.jpg)

この画面が出たらクローン終了です。

![](https://www.evernote.com/shard/s289/sh/c3268bbd-1949-4859-8863-4630a2a559a6/5a6a2f8238b34540d4577d42bc712b78/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%208:54%20PM.jpg)

### 2. 変更をGitHubに反映する
gt200.txt というファイルを作成し、コミットします。（00は自分の出席番号）
コミットが終了すると以下の様な画面が出てくるので、Pushを選択します。

![Push start](https://www.evernote.com/shard/s289/sh/01679bd3-d556-4071-9429-95e5bf6bbd29/2b65569461df4805a3f92e9b4b67cd7b/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%208:59%20PM.jpg)

この画面が出たら、そのまま　OK　をクリックしましょう。

![push](https://www.evernote.com/shard/s289/sh/8c819036-5736-4460-bfa9-315988dc26ff/3b32ee1015bf66ab02f1d231991ae2a0/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%208:59%20PM.jpg)

ユーザー名とパスワードを聞かれるので、
User: tsit-game
Pass: trident53
と入力してください。
（本来は各個人のGitHubアカウントを使用するべきなのですが、
個人のアカウントをすべて登録しているほど時間に余裕が無いため共用のアカウントを作成しました。）

この画面が出るとPush完了です。

![push end](https://www.evernote.com/shard/s289/sh/9120a77e-ffe8-4f2e-8c21-4a12b6689653/5a2160edce3ea1c8135859157b2b9d1d/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%209:00%20PM.jpg)

### 3. GitHubから変更を取得する

フォルダの適当な場所で、右クリックして　TortoiseGit > Pull…　を選択します。

![pull](https://www.evernote.com/shard/s289/sh/88b717e3-3d3a-4b5f-89c1-61c580c108e1/8c75dba4b8f4c16aa6a10e3c951b8998/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%2010:46%20PM.jpg)

次に、Pullする場所を選択します。今回はCloneしたリポジトリから取得するので、originｄのままでOKです。
AutoLoad Putty Key は使用しないので、チェックを外しておきましょう。
準備ができたら　OK　ボタンをクリックします。

![URL Select](https://www.evernote.com/shard/s289/sh/98eec38f-34ba-4577-b23e-578d3f90d13f/a55f8faf8e845d949615b6ef2e5acc99/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%2010:46%20PM.jpg)

以下の画面が出たら、Pull完了です。

![pull fin](https://www.evernote.com/shard/s289/sh/6784c6c9-07a3-41b8-8d75-fee349895c47/b5231bf66ea834fcabdfdccdf3906b32/deep/0/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%204/14/13%2010:47%20PM.jpg)


## 5. ホスティングサービス紹介
### [GitHub](http://github.com)
超有名なGitホスティングサイト
無料アカウントでは公開リポジトリしか作成できないが、
有料アカウントであれば非公開のリポジトリを作成可能。

オープンソースなプロジェクトを管理するのに最適かも？

### [BitBucket](http://bitbucket.org)
もともとはGit用ではなかったが、Gitにも対応したホスティングサイト
無料アカウントでも、非公開リポジトリの作成が可能なのが特徴

5Userまでなら無料らしいので公開したくないものを扱う場合はこっちのほうがいいかも？

その他にもホスティングサイトをはいっぱいあるので、気になる人は調べてください。


## 6. 最後に
###バージョン管理システムを使う上で重要なこと
###「ひとつのコミットには、その主題となる変更と無関係な変更を含めない」


-
##### 参考URL
[ステージを理解して git をもっと便利に使う](http://daretoku-unix.blogspot.jp/2009/08/git.html)
[Gitが使えるホスティングサービスまとめ](http://tande.jp/lab/2012/08/1871)
[イラストでわかる！git入門の入門](http://blog.asial.co.jp/894)