テクニカルスキル研修「GIT」備忘録

:::note 
# 導入
:::
　今回新卒として入社した会社で受けた研修のまとめをブログとして残して起きたいと思います。俗に言う備忘録ってやつです。<br>　新卒研修では、社会人としての最低限の知識である<Strong>「ビジネスマナー」</Strong>と技術者として現場で働く際に必要となる<Strong>「テクニカルスキル」</Strong>の二つの大枠を学びました。

<dl>
    <dt><details><summary>ビジネスマナー</details></summary></dt>
    <dd>・報連相やコミュニケーションの取り方など社会人として最低限必要となるスキル。</dd>
    <dt><details><summary>テクニカルスキル</details></summary></dt>
    <dd>・実際に働いている先輩方が講義してくださる現場で実際に使用する技術的なスキル。</dd>
</dl>
　今回はその中でもどこの現場に配属されても使用すると言われる<font color=red>「GIT研修」</font>で学んだことを書き留めておこうと思います。
 
 ***

:::note 
# Gitとはそもそも何なのか
:::
　初めに、どんな現場でも使用されている<Strong><INS>「GIT」はどんな技術なのか</INS></Strong>です。
 
結論から書きますと、
 ### 「分散型バージョン管理システム」
との事…
 
　ブログを見ているエンジニアの方々ならGITと言う技術を知らなくとも、「分散型バージョン管理システム」と聞けば大体どんなものかは分かると思います。
 　ですが私は新卒、まだ現場で働いたことがなければ、大人数でシステム構築をした事が無い身…精々学校の卒業研究の際に8人の小規模で開発しか行ったことがありません。

　そもそも現場で言う「バージョン管理」とは何なのか何を「分散」しているのかと言うところから残していこうと思います。

<INS>「バージョン管理」とは？</INS>
　 GITの用語として使うバージョンとは、「新しいファイルの追加」や「中身の変更」「ファイルの削除」等対象ファイルに対して何かしら操作を行い挙動や内容が変わった際に使う用語でした。そしてそのバージョンを「管理」するというのは「誰が」「いつ」「何を」したのかを記憶しておくという処理を指すとの事でした。

<INS>「分散」とは？</INS>
　 まず何を分散するのかと言うと、変更を加えるデータを複製するということです。操作する元データの事をマスターデータと呼びそれをローカルのリポジトリに保存、変更を加えてマスターデータへ反映するという流れを取ります。ローカルのリポジトリへマスターデータをコピーすることで、作業中のデータを破壊してしまった場合にも元データはインターネット上に残っているので、何度でもやり直すことができるのです。

　そんな「誰が」「いつ」「何を」変更したのか、マスターデータを直接変更せず失敗しても取り返しがつく技術だからこそ「GIT」が色々なプロジェクトで使われるのだと感じました。
 
:::note
# 学んだ用語
:::
　ここからは、研修中に学んだ「GIT」を使う際の用語をまとめていきます。「GIT」内の作業する場所の名前や共有するまでに行う処理の名称を書いていきます。

<table>
    <tr>
        <th>リポジトリ</th>
        <td>
            ・成果物やGITのシステムファイルを保存しておく場所<br>
            ・エクスプローラと一緒でディレクトリ構造で管理を行っている<br>
            　　　　※リモートリポジトリやローカルリポジトリが存在する。
        </td>
    </tr>
    <tr>
        <th>ワークツリー</th>
        <td>
            ・作業しているディレクトリの事を指す。<br>
            ・変更内容を各種リポジトリへ反映する為にインデックス登録必須。
        <td>
    </tr>
    <tr>
        <th>インデックス</th>
        <td>
            ・リポジトリとワークツリーの中間<br>
            ・複数の変更をまとめてローカルへ反映する為に範囲を保持する<br>
            ・登録の事を「ステージング」と呼ばれる
        </td>
    </tr>
    <tr>
        <th>コミット</th>
        <td>
            ・変更をローカルやリモートへ反映する処理の事<br>
            ・コミットは履歴に残るので、悪いことはできない
        </td>
    </tr>
    <tr>
        <th>クローン</th>
        <td>
            ・リモートのリポジトリをローカルに全ての状態をコピーする事。<br>
            ・開発環境構築の為に初めに行う事が多い処理です。<br>
            ・全コピーの為リモート破損時に直せる可能性がある場所でもある。
        </td>
    </tr>
    <tr>
        <th>ブランチ</th>
        <td>
            ・ファイルへの変更などを作業者が行う場所の事。<br>
            ・作業者間のへ移行作業を記録しリポジトリに保持している。<br>
            ・オリジナルのブランチを「Origin」や「マスター」と呼ぶ
        </td>
    </tr>
    <tr>
        <th>プル</th>
        <td>
            ・リモートにある情報をローカルに更新を行う事。（マージ）<br>
            ・リモートとの照らし合わせも行い、違いを探してくれる。<br>
            ・リモートへコミットする前に行う事が多い。
        </td>
    </tr>
</table><br>
	※ローカルリポジトリとリモートリポジトリ<br>
<dt><details><summary>リモートリポジトリ</details></summary>
    <dd>
        インターネットやサーバー上に配置されるリポジトリです。<br>
        複数人が変更を加えるオリジナルデータが格納されます。<br>
        データ破損などをしてしまった場合、全体に被害が出てしまうので注意が必要です。
    </dd>
 
<dt><details><summary>ローカルリポジトリ</details></summary>
    <dd>
        作業するパソコンに配置されるリポジトリです。<br>
        各ブランチで作業を行い、ローカルで統合を行ってからリモートへ反映します。<br>
        データ破損などしてしまっても、リモートから再度複製することでやり直せます。
    </dd>

:::note
# 研修資料にあった分かりやすい図
:::
  最後に、研修資料にあったGITの処理の流れなどがとても分かりやすく図解化されたものを載せておこうと思います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051505/2e680dca-f296-4a13-ba04-c71d328dce78.png" width=100%>
     
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051505/f437bf21-7edf-4a1f-9c41-f66c13b56f7f.png" width=100%>