Gitの使い方

2020年07月12日

Gitとは


アプリケーションを開発する上でのバージョン管理ツールと呼ばれるものの一種で任意のタイミングで状態を記録、保存することができます。

私が思ったのは、シュタインズゲートのタイムリープと似ている!

タイムリープってタイムマシンで、任意ポイントの過去に飛んで、過去を変えようとするけど、色々な世界線が存在し一つの過去を変えるともう一つの過去が変わってしまうみたいな状態ですよね。

Gitも同じような感じで存在しています。

1つのアプリケーションを作る際に複数人で作業する時、個人がそれぞれの世界線にとんで作業をすることが可能です。

そして、バグなどが発生した際に過去のどの部分がバグがない状態のものか確認することでそのバグがない状態のプログラムから編集し直すことができると言う利点があります。

さらに、個人同士が作成したプログラムを最後に掛け合わせることで1つの完成形に持っていくことが可能です。

シュタインズゲートみたいに過去に戻って未来を変えるみたいな作業の仕方をすることができるすごいツールです。

前置きはここまでにして早速、使い方を説明していきます。


Gitを使うには


※「Rails newコマンド」でアプリケーションを作成しておく。


①開発環境にインストールされているか確認する。

#Gitのバージョン確認
$ git --version

#下のように表示されればインストールされています(2.14.1は個々の環境で変わります)↓↓
git version 2.14.1

インストールされていない場合はインストールしましょう。

こちらのサイトが参考になります。


②ローカルリポジトリを設定する。

リポジトリとは、バージョンを保存する為の入れ物のことです。このリポジトリに何日にどの世界線から保存されたのかわかるように保存されます。

ローカルとは、自身のパソコン内と言う意味です。とーカル環境と言ったりします。

では、設定方法です。

$ cd 作成したいディレクトリ

$ git init

cdコマンドでディレクトリを移動し、git initコマンドでリポジトリを設定します。以下の表示が出ればokです。

※cloud9では、間違えたディレクトリに作成してしまった場合、非表示ファイルを表示させ「.gitディレクトリ」を削除してから、移動し直して再度、「git init」を実行してください。


③コミットを行う。

コミットとは、現在のリポジトリの状態を記録するという意味になります。


手順1、ファイル指定

#現在のディレクトリ以下のファイルを指定する
$ git add . 

コマンドの最後にある「.(ドット)」の意味が現在のディレクトリを意味しています。


手順2、記録(コミット)する

#コミットを実施する
$ git commit -m "first commit"

「-m “first commit”」 の意味

コミットメッセージと言ってそのコミットで何を変更したのかをわかりやすくメッセージとして残すことができます。


上のコマンドを一括で行う

$ git commit -a -m "コメント"

コミットができた後の表示

ここでみるべき表示は2箇所で意味は↓↓

#masterブランチにこのidでコミットした意味とコミットコメント
[master 9155783] first commit

#変更されたファイルは1つ、あらたに増えたプログラムは1つ、減ったプログラムは1つと言う意味
1 file changed, 1 insertion(+), 1 deletion(-)

④リモートリポジトリを作成する

リモートリポジトリとは、Githubなどのサービスを利用して作成するリポジトリになります。

利点は、複数人で作成をする際にローカルリポジトリ(個人の開発環境)のコミットデータを同期して作業を進めていくことができる点です。(下図がイメージ)

投稿画面

以下がGithubを利用してリモートリポジトリを作成する手順です。


手順1、Githubに会員登録する。(公式ページへ


手順2、マイページから「repositories」をクリックし、「NEW」ボタンをクリック


手順3、リポジトリ名を入力するし、「create repository」をクリック(作成しているものを連想しやすい名前をつけるとよい)


手順4、リモートリポジトリのURLをコピーする。

https://tech-master.s3.amazonaws.com/uploads/curriculums//f808b5d334e6a839855175eb77206f4a.png

手順5、cloud9でgithubとリモートリポジトリ追加コマンドを入力する。

$ git remote add origin 先ほどコピーしたURL

⑤cloud9とGithubを連携させる

cloud9側で作成した鍵を使ってGithubに登録を行います。


手順1、ssh-keygenコマンドで鍵を作成する

$ ssh-keygen

エンターを何度か押すと、ホームディレクトリの.sshファルダにsshキーが作成されます。


手順2、作成された公開鍵をGithubに登録する。

$ cat ~/.ssh/id_rsa.pub

このコマンドを実行したあと、表示された文字列を全てコピーしてください。


手順3、GithubにSSHキーを登録する。

GithubのSSHキー登録ページ

https://tech-master.s3.amazonaws.com/uploads/curriculums//ae22c0f25a08b3f2c0ede06726d7bb1d.png

⑥cloud9のローカルリポジトリの内容をGithubのリモートリポジトリに同期させる

以下のコマンドを実行してください。

#ローカルリポジトリのmasterブランチの内容をリモートリポジトリに同期する意味
$ git push -u origin master

コマンドの意味

git pushコマンド:ローカルリポジトリの内容をリモートリポジトリに反映させます。(プッシュという)

git pullコマンド:プッシュとは逆でリモートリポジトリの内容をローカルリポジトリに反映させる。(プルという)

-uオプション:ローカルとリモートを紐づけるものでmasterブランチで作業した後なら「git push」だけで次回からプッシュができるようになります。

以下がイメージです。

投稿画面

コミットをするタイミングはどこ?


目安になるのは、作業が一区切りしたタイミングです。


  • メソッドを1つ追加
  • ファイルを1つ追加
  • 定数を1つ追加 など

できるだけ細かくコミットしていくとバグが発生した際に後追いしやすくなります。

さらに、コミットする際にはコミットコメントを残すことでどこを変更しているのか?なぜ変更したのか?
わかりやすくなります。


複数人で開発を進める為の使い方


ここでシュタインズゲートの世界線に似た部分が出てきます。


ブランチ機能

作業履歴を残すことができる機能です。

この機能が世界線に似ています。

masterブランチと言うメインの世界線があって、ポイントとなる部分から別の世界線へ同じ機能を持ってジャンプ!

持ってきた機能の状態から開発していくことができます。

下図がブランチのイメージPDF

ブランチを使用する為のコマンドは以下です。

#ブランチの作成(ブランチ名:create-top-page-view)
$ git branch create-top-page-view
#ブランチの切り替え(ここで世界線が変わる)
$ git checkout create-top-page-view

上の2つを一括で行うコマンド↓↓

git checkout -b ブランチ名

ブランチ名は違う名前ですが以下のようにターミナルの(master)が(test)に表示が変わります。

この状態でプログラムの修正をしていきましょう。

では、次に1度に多くのプログラムを修正してしまった場合のコミット方法を紹介します。


一度に多くのプログラム修正をした場合のコミットの仕方


コミットはできるだけ細かく行っていくことがいいと先ほど紹介しましたが、一度に多く修正してしまう場面もあります。その際に細かくコミットする方法があります。

例えば、コミットしようと思って「git addコマンド」を実行した場合です。

$ git add .

手順1、ステータスを確認する

$ git status

すると下図のように表示されます。

緑色の文字が選択された部分になります。
2つのファイルが選択されています。

このように選択されている部分は
「インデックス上にある」と表現します。

今回の例は、HTMLファイルとCSSファイルを編集しました。

手順2、選択されたファイルを解除する。

$ git reset HEAD .

最後のドット(.)でファイルのパスを指定しています。

下図のこの赤枠部分です。(上の表示と同じ)

手順3、再度ステータスを確認する。

緑文字だった部分が赤文字に変わりました。

これで選択を解除できたことになります。

手順4、赤文字のファイルを個別で「git add コマンド」を使って選択し直しコミットする。

ターミナルにそのままコマンドを打ってもいいし、赤文字の部分をクリックして「git add」をクリックしてもいいです。(下図参照)

下図のようにコマンドが入力される。

手順5、再度ステータスを確認

赤文字だった部分が緑文字に変わっています。

これで個別選択ができました。

手順6、コミットする。

手順7、手順4、5を繰り返し、残りファイルをコミットする。


編集したブランチをマージする


マージとはブランチとブランチを統合すると言うことを指します。今回は、masterブランチにtestブランチをマージします。(イメージはこちら)

手順1、ターミナルで編集しているブランチになっているかを確認(例:testにアスタリスク(*)がついているか?)

$ git branch

手順2、リモートリポジトリにプッシュする。

$ git push origin test

下図のような表示になります。


手順3、Github上でプルリクエストする。

プルリクエストとは、Github上で編集内容の確認作業を実施することです。


1、Githubに移動し、リモートリポジトリにアクセスし、「Compare & pull request」をクリック(下図)


2、真ん中の欄に変更箇所など端的に記載し、右下の「Create pull request」をクリック。(下図)


3、次の画面にきたら「Merge pull request」をクリックする。


4、「Files changedタブ」をクリックすると、作業者はコードを確認できる。

変更箇所には「緑」か「赤」で塗り潰される。


意味

赤:削除した部分

緑:追加した部分、または、削除後のコード


5、必要なら行番号をクリックすると変更部分にコメントを残せる。

コメント欄が出てくる


5、プログラムに指摘できたら「Fnish your review」を押し、「Submit review」を押して確認を終わります。

6、「Merge pull request」をクリック


7、「Confirm marge」をクリック


8、マージ済みのブランチは「Delete branch」で削除します。


9、リモートリポジトリをcloud9上でプルする。

#masterブランチに切り替える
$ git checkout master
#リモートリポジトリの変更をmasterブランチにプルする
$ git pull origin master

以下のような画面が出ると完了。


10、ローカルリポジトリから「testブランチ」を削除する。「git branch -d ブランチ名」

#testブランチ削除コマンド
$ git branch -d test

#ブランチが削除できたか確認
$ git branch
#以下のように表示されればok
* master

まとめ


  1. 「リモートリポジトリ1つ」と「各人ローカルリポジトリ」を用意する
  2. masterブランチから各人がそれぞれの担当箇所作業用ブランチを作成
  3. 担当箇所の作業が完了したら、リモートリポジトリにプッシュする
  4. リモートリポジトリで担当箇所のブランチを統合する
  5. 各々のローカルリポジトリとリモートリポジトリを同期する
  6. 2から5を繰り返し完成に向かう