Gitについてもう少し詳しく(初心者編)

##Gitのお勉強第2弾
Gitをさわりながら覚えたことをアウトプットします。
前回のおさらいをしつつ行きたいと思います！

環境：
Centos7
git version  1.8.3.1

##リポジトリ
サーバにプログラムを溜めておく場所をリポジトリというそうです。
つまりメタデータ、変更対象、変更対象がおいてあるディレクトリ的なものってイメージです。

このリポジトリを自分の端末にコピー(clone)して作業します。
さっそくcloneします。
まずはGithubで対象を探します。
今回は完全に自分の趣味になりますが以下のURLからcloneさせていただきました。
https://github.com/eriklindernoren/ML-From-Scratch
※マシンラーニングのモデルとアルゴリズムを Python で実装したコード集らしいです、中身はいずれQiitaへあげようと思います

~~~
[root@localhost TEST]# git clone　https://github.com/eriklindernoren/ML-From-Scratch.git
Cloning into 'ML-From-Scratch'...
remote: Counting objects: 2510, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 2510 (delta 0), reused 0 (delta 0), pack-reused 2507
Receiving objects: 100% (2510/2510), 538.63 KiB | 50.00 KiB/s, done.
Resolving deltas: 100% (1925/1925), done.
[root@localhost TEST]#
[root@localhost TEST]# ll
合計 0
drwxr-xr-x. 4 root root 165  4月 17 21:15 ML-From-Scratch
[root@localhost TEST]#
~~~

ML-From-といったディレクトリができましたね、OKOK


##ブランチ
次はブランチについて
ブランチは枝って意味らしいですね。
masterという大本のブランチから作業ごとにブランチを切り(分割するイメージ)作ったブランチで作業するのがスタンダードみたいです。

さっそくブランチ作りとブランチ間の移動をやってみます！

~~~
[root@localhost TEST]# cd ML-From-Scratch/
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# git branch　←現在のブランチを確認する
* master
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# git branch test master　← masterを作成元にしたのtestブランチを作成
[root@localhost ML-From-Scratch]# git branch
* master　←*がついている場所が現在の位置
  test
[root@localhost ML-From-Scratch]# git checkout test　←checkoutで移動(やや複雑ですね)
Switched to branch 'test'
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# git branch
  master
* test　←testに移動
[root@localhost ML-From-Scratch]#
~~~

##add
ブランチも移動できたのでここでファイルをごにょごにょと編集します。

~~~
[root@localhost ML-From-Scratch]# ll
合計 36
-rw-r--r--. 1 root root  1074  4月 17 21:15 LICENSE
-rw-r--r--. 1 root root    29  4月 17 21:15 MANIFEST.in
-rw-r--r--. 1 root root 13780  4月 17 21:15 README.md
drwxr-xr-x. 9 root root   173  4月 17 21:15 mlfromscratch
-rw-r--r--. 1 root root    78  4月 17 21:15 requirements.txt
-rw-r--r--. 1 root root    57  4月 17 21:15 setup.cfg
-rw-r--r--. 1 root root  1078  4月 17 21:15 setup.py
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# echo "HAHAHAHAHA!!" >> test
echo "HAHAHAHAHAll" >> test
[root@localhost ML-From-Scratch]# ll
合計 40
-rw-r--r--. 1 root root  1074  4月 17 21:15 LICENSE
-rw-r--r--. 1 root root    29  4月 17 21:15 MANIFEST.in
-rw-r--r--. 1 root root 13780  4月 17 21:15 README.md
drwxr-xr-x. 9 root root   173  4月 17 21:15 mlfromscratch
-rw-r--r--. 1 root root    78  4月 17 21:15 requirements.txt
-rw-r--r--. 1 root root    57  4月 17 21:15 setup.cfg
-rw-r--r--. 1 root root  1078  4月 17 21:15 setup.py
-rw-r--r--. 1 root root    13  4月 17 21:29 test ←こんなんつくってみました
[root@localhost ML-From-Scratch]# cat test
HAHAHAHAHAll
~~~
作っただけではmasterに更新されません、
masterが更新された瞬間に次の処理が走る！などの環境も多々あるそうで、更新の前にワンステップ置く必要があります。

そこでgit addです！
ファイルをステージングエリアに置き、更新する対象を選択します。

~~~
[root@localhost ML-From-Scratch]# git status
# On branch test
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test
nothing added to commit but untracked files present (use "git add" to track)
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# git add test
[root@localhost ML-From-Scratch]# git status
# On branch test
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   test ←ステージング上がりました
#
~~~

##commit
ステージングに上げたファイルを更新するときにはcommitをします！
結果にcom...
さっそくいきましょう！
コマンドはgit commitです！
-m のオプションをつけてコメントを残すのが一般的なようです！

~~~

[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# git commit -m "testv1"
[test 2431e44] testv1
 Committer: root <root@localhost.localdomain>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+)
 create mode 100644 test
[root@localhost ML-From-Scratch]#
~~~
おっと、ユーザ名とEメールを登録できてないとcommitできないようですね

登録からの(適当です)

~~~
[root@localhost ML-From-Scratch]# git config --global user.name "hogehoge"
[root@localhost ML-From-Scratch]# git config --global user.email "hogehoge@hoge.jp"
~~~

すかさずcommit!!

~~~
[root@localhost ML-From-Scratch]# git status
# On branch test
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]#
[root@localhost ML-From-Scratch]# git commit -m "testv1"
[test 008f12d] testv1
 1 file changed, 1 insertion(+)
[root@localhost ML-From-Scratch]#
~~~

OK!

ちゃんとcommitできたかの確認は
git logでできます

~~~
[root@localhost ML-From-Scratch]# git log
commit 008f12d24f7dabcfb9dbd4ae3ddadd313a0d25c4
Author: hogehoge <hogehoge@hoge.jp>
Date:   Tue Apr 17 21:39:24 2018 +0900

    testv1

~~~

##まとめ
gitの動かし方について簡単にまとめてみました！
最初のcloneのとこだけGithubからもらいましたが今回の内容は基本localで完結しているものです。
よく聞くpushやpullについてはまたの機会にまとめたいと思います。