はじめてのGitとGitHub

# はじめてのGitとGitHub

## GOAL
gitを理解した上で、gitを用いてソースコードをGitHubにアップ出来るようになる。

## Section1
### 1. Gitとは何か、Gitで出来ること。
**Gitはバージョン管理システム**
ファイルのバージョンを管理出来る
あなたのパソコンこんな感じでファイル管理されてませんか。。？
<img width="207" alt="スクリーンショット 2017-10-21 16.08.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/32222129-10ee-6b94-1a1f-d5e3cb3f75eb.png">
また複数人で編集すると、いつ誰が編集したかわからなくなってしまう。

バージョン管理することで、いつ誰がどのファイルを変更したのかが把握出来る。
また、元に戻すことも出来る。

### 2. Gitの仕組み
いつ誰が何を変更したのかが把握でき、メッセージをつけられる。
・変更履歴を順々に記録出来る。
・記録する際はメッセージをつけられる。
<img width="490" alt="スクリーンショット 2017-10-21 16.12.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/ea8e293f-39ed-4cb3-15c6-02ec04b4cffd.png">

#### 流れ
コミット：自分のファイルの変更を記録する
push：pushして共有リポジトリに変更を登録
pull：変更されたファイルを取得（落としてくる）
<img width="488" alt="スクリーンショット 2017-10-21 16.15.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/d0c84d41-ceaa-8725-2986-a6a00282e13f.png">



### 3. GitHubの仕組み
・gitリポジトリのホスティングサービス
・変更履歴をオンライン上で預かってくれるもの
・Gitで管理されているファイルを見やすくweb上で見れるツール
・コードを保管してくれる

#### 特徴
・プルリクエスト
コードの修正の取り込みをリクエスト出来る
また、修正依頼やコードレビューなども出来る

## Section2
### 1. Gitのインストール
※macにはデフォルトでGitが入っている

ターミナルを開いてGitが入っているかを確認する
確認コマンド
`[~] git version`
<img width="1324" alt="スクリーンショット 2017-10-21 16.56.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/09f85880-b859-1f50-1ca7-7cdaa2157d8e.png">


:warning:私の場合なぜかエラー

```
[~] git version                                                       
Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.
```
↑下記記事参考にして使えるように 
https://4to.pics/article/post/83

```
[~] git version                                                                                                                                    
git version 2.13.5 (Apple Git-94)
```
<img width="244" alt="スクリーンショット 2017-10-22 8.40.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/6522c4cc-0f83-779f-ee48-f32487f34d3e.png">

インストールは下記のリンクから
https://git-scm.com/downloads

### 2. GitHunの登録

### 3. Gitの初期設定
さっきGithubに登録したアカウントを登録する
・ユーザー名を登録

```
git config --global user.name ＊＊＊＊＊
```
・メールアドレスを登録

```
git config --global user.ｅｍａｉｌ ＊＊＊＊＊@gmail.com
```
## Section3
### 1. GitとGitHubでバージョン管理する
①バージョン管理するファイルを作成
今回はデスクトップにファイルを作成
<img width="86" alt="スクリーンショット 2017-10-22 9.10.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/f8b2eb3e-1d58-10b2-f731-ea1a63557a0f.png">

作成したファイルの中に、テキストファイルを作成
中身はなんでもOK
<img width="403" alt="スクリーンショット 2017-10-22 9.12.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/a3a5bc51-eac5-00b3-9911-6d4670f744c1.png">
<img width="256" alt="スクリーンショット 2017-10-22 9.12.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/c802e652-0550-7a2a-4948-83bc38127b2d.png">
このファイルをバージョン管理する！

②Gitリポジトリを作成
リポジトリとはファイルやディレクトリの状態、変更履歴を記録する場所。
作成コマンド

```
git init
```
上記のコマンドで何が行われているかというと。。
git initで.gitディレクトリが作成され、管理ファイルが作成され、そこで変更履歴が保存されている。
<img width="252" alt="スクリーンショット 2017-10-22 9.07.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/55d88425-6bb9-78b8-95f8-892ec8848586.png">

実際に作成してみる

```
[~] pwd                                                                                                                                             8:53:47  ☁  master ☂ ✭
/Users/hatamiki
[~] cd Desktop                                                                                                                                      9:13:52  ☁  master ☂ ✭
[Desktop] cd intro_git                                                                                                                              9:14:06  ☁  master ☂ ✭
[intro_git] ls                                                                                                                                      9:14:21  ☁  master ☂ ✭
first.txt
[intro_git] git init                                                                                                                                9:14:28  ☁  master ☂ ✭
Initialized empty Git repository in /Users/hatamiki/Desktop/intro_git/.git/
[intro_git] ls -a                                                                                                                                   9:14:39  ☁  master ☂ ✭
.         ..        .git      first.txt
[intro_git] ls -a .git                                                                                                                              9:14:49  ☁  master ☂ ✭
.           ..          HEAD        branches    config      description hooks       info        objects     refs
```
### 2. Gitの基本的なワークフロー

①ファイルの変更をステージングエリアへ追加
ステージングエリアとはコミット前の控え室
②ローカルリポジトリにコミット
<img width="600" alt="スクリーンショット 2017-10-22 15.49.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/53f859ca-ceb3-b425-b071-bf9cdd8c128e.png">

```
[intro_git] git add first.txt  
//addでステージングエリアへ登録                                                                                                                    15:52:47  ☁  master ☂ ✭
[intro_git] git status first.txt 
//現在のステータス確認。ここで緑色になって入れば、ステージングエリア登録完了している                                                                                                                  15:53:01  ☁  master ☂ ✚
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   first.txt
[intro_git] git commit first.txt 
//コミットしてローカルリポジトリに追加                                                                                                                  15:54:56  ☁  master ☂ ✚
[master (root-commit) a2b2ff4] by haneda first commit
 1 file changed, 2 insertions(+)
 create mode 100644 first.txt
```
<img width="395" alt="スクリーンショット 2017-10-22 15.58.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/a24ffb10-679c-4484-0247-c7dab60eb8ed.png">

③リモートリポジトリにpushして追加
コミットできたら、GitHubへpushしていく。

GitHubを開いて、右上のプラスボタンからNew repositoryでリポジトリを作成

repository nameをintro_git
状態はpublic
create repository
で作成！
リポジトリが作成されたら、下記のコマンド実行してpush

```
[intro_git] git remote add origin https://github.com/hanedamiki/intro_git.git                                                                       
[intro_git] git push -u origin master
```
:warning:私の場合だとなぜかアカウント入力してと言われる。。
下記のURL参考に解決！
https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
http://nanase.hatenablog.jp/entry/2013/09/09/232529

### 3. 修正したファイルをローカルリポジトリに追加する
git add でファイルをステージングエリアへ追加
git commitでローカルリポジトリへ追加
<img width="574" alt="スクリーンショット 2017-10-22 19.01.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/dee51172-974e-a7ed-7f4e-718f7c4dbb75.png">

ステージングエリアは変更したファイルを選ぶエリア
ローカルエリアへの準備　控え室のようなもの

コミットする際にはメモ出来る
変更内容をメモする
git commit -v は修正された差分が記載される
<img width="547" alt="スクリーンショット 2017-10-22 19.09.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/53334521-d0bf-075e-234a-c37171a884ad.png">

### 4. 色々な変更をコミット
新規作成、削除、複数ファイルのコミット

新しいファイルを作成
<img width="394" alt="スクリーンショット 2017-10-23 11.01.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/e7cf752e-51cb-ecc5-b670-0ba4996025ff.png">
git status で確認してみると赤色になって、ファイルが新しく作成されている表示になっている
<img width="566" alt="スクリーンショット 2017-10-23 11.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/14260ddb-d34c-c978-5b20-2fb6a3b01173.png">


### 5. フィイルの変更履歴を確認
変更履歴を確認

```
git log
```
<img width="575" alt="スクリーンショット 2017-10-23 11.34.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/69106/406a2a5a-2967-0b85-a137-7b14bed8e3a2.png">

オプション
一行で表示する

```
git log --oneline
```

ファイルの差分を表示する

```
git log -P first.txt
```
最新3件の変更を表示

```
git log -n 3
```

### 6. フィイルの変更差分を確認
ローカルとステージングの差分

```
git diff
```
ステージングと最新コミットの差分

```
git diff HEAD
```
commitするとHEADで差分見てもなくなる

### 6. バージョン管理したくないファイルの登録
どういったファイル？
・自動生成されるファイル
・パスワードが記載されているファイル

.gitignoreに記載していく

```
git rm --cached second.txt
```
バージョン管理に戻す

```
git reset HEAD second.txt
```