Lesson1: まとめ How to Use Git and GitHub＠Udacity

#概要
この回ではVersion Controlを学ぶ。
Version Controlとは・・・
・その時々のversionを保存できる。
・前回保存した内容を復元できる
・違うバージョンの変化点を比較できる
・ほかの人と、コラボしやすい

具体的には下記２つを使ってVersion Controlを行っていく。
・Git・・・a Version control system
・GitHub・・・a code sharing and collaboration platform
これらを使う上ではUnixのコマンドラインのようなものを使用する。
<Unixのコマンドラインについて>
コマンドラインインストラクション[Command Line Instructions@Udacity](https://www.udacity.com/wiki/ud775/command-line-instructions#tutorials)
コマンド集[University of SURREY DEPARTMENT OF ELECTRICAL AND ELECTRONIC ENGINEERING UNIX Introduction：サリー大学](http://www.ee.surrey.ac.uk/Teaching/Unix/unixintro.html)

このコースでは下記の流れで進んでいく。
Lesson1: Version Controlを学び、Gitをインストールして、コードを見てみる。
Lesson2: Gitでコードを読んで書いてみる
Lesson3: コードをシェア＆ほかの人とコラボの仕方
今回はLesson1

##ファイルの比較：コマンドプロンプトで
今まで動いていたのに、コーディングしていたら突然動かなくなった！ということがあった場合に、新・旧のコードを比較すると問題を容易に解決できる。ただ、人が行うのは骨が折れるので、コンピューターで行いたい。各OSのコマンドプロンプトに簡単なコマンドを入力して実現できる。比較したいファイルが置かれているディレクトリに移動して下記コマンドを実施。
Windows・・・FC old_file_name.py new_file_name.py
Mac/Linux・・・diff -u old_file_name.py new_file_name.py

比較したいファイルは.pyにした。FCはfile compareらしい。
違いが分かったら、コーディングで使っていたテキストエディタでコードをなおす。

このやり方だと、いろいろめんどくさいので**お勧めはGitを使う**こと。


##講義を受ける準備
####Gitとテキストエディタのインストール・設定
＜準備0＞
Windowsユーザーなら通常のコマンドプロンプトは少し物足りないのでGitを入れよう。
どちらにしろ、このコースで後々インストールする。
[Git Installation on Windows](https://www.udacity.com/wiki/ud775/install-git/install-git-windows)

＜準備1＞テキストエディタインストール・設定
Microsoft Word等ではなく、軽いテキストエディタPCにインストールし、コマンドプロンプトから起動できるようにしよう。
[Setting up Sublime](https://www.udacity.com/wiki/ud775/sublime)

この通りやってもうまくいかない。。。
まずはsublime_text.exeの保存先(パス)はもちろん違う。
いろいろやって解決したので、下記にやり方を。

>cd ~
でホームディレクトリに移動。ここにある、.bash_profileというファイルをSublimeで開いて、一番下に、下記

>alias subl='c:/"program Files"/"Sublime Text 3"/sublime_text.exe'

をコピペ。スペースがあるファイル名はクオーテーションで囲まないといけないみたい。


＜準備2＞コース専用「version-control」フォルダ・テキスト作成
GitBashから下記のコマンドを使って行う。#はコメントアウト。#より右はコンピューターに認識されない。
>cd ~                          # change directories to your home directory
mkdir version-control         # make version-control directory
cd version-control            # go to version-control directory
mkdir reflections             # create reflections directory
cd reflections                # go to reflections directory
subl lesson_1_reflections.txt # launch sublime with file called lesson_1_reflections.txt (you can replace subl with another editor here if you prefer a different one)

できたかどうかの確認のためには下記コマンドを実行
>pwd # print working directory - shows what directory you are in
ls  # list the files in this directory

これで準備は整った！

#Git(GitBash)の使い方
日本語だとここがわかりやすかった。
[WindowsでGitを始めたらまず確認！Git Bashの設定&ショートカット](https://www.granfairs.com/blog/staff/gitbash-setting-shortcut)

コミットしたかったら、フォルダの一番上でgit initをまずはすること。
参照:[Gitを使いこなすための20のコマンド](https://mag.osdn.jp/09/03/16/0831212)

<コマンド>
git log
直近のcommit一覧が出る。それぞれにIDがついている。
最新のコミットが一番上。

git diff commitID1(旧) commitID2(新)
２つのcommitを比較する。
ID1(旧)に比べて、ID2(新)に追加されたものは(+)表示
ID1(旧)に比べて、ID2(新)に削除されたものは(-)表示

commit IDは最初の4文字以上を入力すれば認識する。


#いつコミットすべきか
commitしまくるとlogが見づらくなる。かといって、変化点が大きすぎるcommitは何が変わったのかわかりづらい。
commitタイミングは、**one commit per logical changeがベスト。**
→typo修正は複数ではなく、1つ修正したらcommitしよう。

#複数ファイルに関係するcommit
リポジトリに入っているファイルをすべてcommitすれば、複数ファイルで保存できる。
それぞれのcommitでどのファイルが変更されたかは、
git log --stat
で見れる。

#リポジトリのクローン
####サンプルリポジトリ"Asteroid game"のwebからのクローン
クローンをすると今までの変更履歴、つまり、すべてのコミットを含めてファイルをダウンロードできる。
git clone URL
今回はアステロイドゲームのリポジトリをクローンした。
Asteroids URL
Use the following url to clone the Asteroids repository: https://github.com/udacity/asteroids.git


#git checkout：各コミット時の動作確認

ここまででコミット同士の比較をgit diffコマンドで行ってきた。
git checkoutコマンドでは、一時的に各コミット時点での、動作確認をすることができる。
例えばどのコミットでバグが発生したのかの後追いで使う。

上記のアステロイドゲームのリポジトリで、git checkoutを使ったバグ特定をやってみる。
アステロイドフォルダのidex.htmlをクロームで開くとアステロイドゲームが出てくる。
プレイし始めると、弾丸が間髪おかずに出てきていることが分かった。このバグがどこのコミットの時点で出てきたか探っていく。
1, git log                #コミットログを見る。
2, git checkout commitID  #コミットIDの時点のプログラムで実行

上記1,2を繰り返して、変な挙動をし始めたコミットを特定。
コミットIDが特定できたら、git diff commitID(バグ入った前) commitID(変な挙動が入ったコミット)
でどの部分が変わったかを特定する。


#GitBashの設定
自分好みにいろいろカスタマイズできる。
・背景色の変更
→GitBash開いて、右クリックのOptionsを選んでBackgroundで変えられる。
・tabキーを押したら、残りのコマンドを入れてくれる
→PCごとに設定しないといけないのは不便なのでやめた。
・GitBash上での現状の状態表示(現状のコミットID表示、*で変化点あり→コミット推奨)
→1, [git-prompt.sh](https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh)をブラウザで開いて右クリックして保存。
2, 保存した場所から、ホームディレクトリにファイルを移動。
3, 下記コマンドをGitBashから実行
>git config --global core.editor "'C:/Program Files/Sublime Text 2/sublime_text.exe' -n -w"
>git config --global push.default upstream
>git config --global merge.conflictstyle diff3

1行目のリンク先は、Sublimeのexe保存フォルダに書き換えること。
これで完成。


#感想
結構時間がかかってしまった。特にsublimeのエイリアス設定で躓いた。。。



#調べた英単語
restore・・・v, 復興する、再建する、修復する、復元する
terminology・・・adj, (特殊な)用語法、術語、(専門)用語
pros and cons・・・n, 賛成・反対(pro-：賛成, con-：反対contra-)
doable・・・adj, することのできる。
interrelated・・・adj, 相互に関係のある
proportional・・・adj, 釣り合った、均整のとれた、比例の、比例した、(…に)比例して
cohesive・・・adj, 密着する、結合力のある、凝集性の
configure・・・v, 形成する、設定する、設計する