CI/CDをkatacodaで体験(初心者向け) - Part2


CI/CD入門

このぺーじでは、katacodaと呼ばれる「ブラウザから無料で勉強用のインスタンスを起動できるWebサービス」を利用してCI/CDを実践します
内容は上記リンクに沿うので、不明点があればそちらへどうぞ

Gitのバージョン管理について - scenario2

ここでは、CI/CDとして欠かせないGitによるバージョン管理について学習します
このシナリオで学習することをさっと確認する場合は概要を確認
理解に間違い等がございましたら、ぜひご指摘ください

概要

  • git diffでレポジトリとワーキングディレクトリ、ステージング(オプションとして--staged)との差分をコードレベルで表示
  • git logでGitのレポジトリの履歴とコミットログを出力
  • git showはコミットで行われた変更を表示(前回コミットとの差分を出力)

Step 1 - Git Status

前回の記事で説明した通り、git statusはレポジトリの状態と異なるファイルの状態を出力します
現在のGit管理されているファイルの状態を確認

$ git  status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   committed.js

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        untracked.js

no changes added to commit (use "git add" and/or "git commit -a")

レポジトリ上にcommitted.jsは存在しており、何らかの変更が加えられていると判明
一方、untracked.jsはレポジトリ上に存在しなく、新規で作成されたため、untracked fileと認識されています

Step 2 - Git Diff

git diffはレポジトリとワーキングディレクトリ、ステージング(ステージングとの比較には--stagedオプションを必要とする)との具体的な差分を出力します。
そのため、新規作成されたファイルは無視されます

$ git  diff
ESC[1mdiff --git a/committed.js b/committed.jsESC[m
ESC[1mindex 12e7e7c..fc77969 100644ESC[m
ESC[1m--- a/committed.jsESC[m
ESC[1m+++ b/committed.jsESC[m
ESC[36m@@ -1 +1 @@ESC[m
ESC[31m-console.log("Committed File")ESC[m
ESC[32m+ESC[mESC[32mconsole.log("Demostrating changing a committed file")ESC[m

ちなみに、git diffにより出力される対象は現在いるディレクトリには左右されない模様

$ pwd
/home/scrapbook/tutorial
$ mkdir testDirectry
$ git diff testDirectry/
$ cd testDirectry/
$ git diff
ESC[1mdiff --git a/committed.js b/committed.jsESC[m
ESC[1mindex 12e7e7c..fc77969 100644ESC[m
ESC[1m--- a/committed.jsESC[m
ESC[1m+++ b/committed.jsESC[m
ESC[36m@@ -1 +1 @@ESC[m
ESC[31m-console.log("Committed File")ESC[m
ESC[32m+ESC[mESC[32mconsole.log("Demostrating changing a committed file")ESC[m

また、特定のファイルの差分のみ表示する場合はgit diff <file_name>と指定すればよい

$ git diff untracked.js   //レポジトリに存在しないため出力されない
$ git diff committed.js
ESC[1mdiff --git a/committed.js b/committed.jsESC[m
ESC[1mindex 12e7e7c..fc77969 100644ESC[m
ESC[1m--- a/committed.jsESC[m
ESC[1m+++ b/committed.jsESC[m
ESC[36m@@ -1 +1 @@ESC[m
ESC[31m-console.log("Committed File")ESC[m
ESC[32m+ESC[mESC[32mconsole.log("Demostrating changing a committed file")ESC[m

Step 3 - Git Add

ワーキングディレクトリからステージングへのファイルの移動

$ ls -a
.  ..  committed.js  .git  untracked.js
$ git add .   //カレントディレクトリ上のファイルを一度にステージングに移動
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   committed.js
        new file:   untracked.js

このようにGitでの管理対象はファイルだけでなく、ディレクトリも指定可能
特定のファイルのみステージングへ移動させる場合、git add <file name>に置き換える

Step 4 - Staged Differences

step2にてgit diffはレポジトリとの差分を具体的に出力すると説明したが、正確にはレポジトリとワーキングディレクトリの差分を出力
ステージングとの差分を出力する場合は--stagedオプションを必要とする

$ git diff committed.js   //committed.jsはワーキングディレクトリ上に存在しないので出力なし
$ git diff --staged committed.js
ESC[1mdiff --git a/committed.js b/committed.jsESC[m
ESC[1mindex 12e7e7c..fc77969 100644ESC[m
ESC[1m--- a/committed.jsESC[m
ESC[1m+++ b/committed.jsESC[m
ESC[36m@@ -1 +1 @@ESC[m
ESC[31m-console.log("Committed File")ESC[m
ESC[32m+ESC[mESC[32mconsole.log("Demostrating changing a committed file")ESC[m

Step 5 - Git Log

git logはGitのレポジトリの履歴とコミットログを出力する

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   committed.js

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        untracked.js

$ git log
ESC[33mcommit 3a8c0df6d91273ebd81a5c3c2b0e76303a722395ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[
Author: Katacoda Scenario <[email protected]>
Date:   Sat Oct 10 09:00:32 2020 +0000

    Changed the output message in committed.js

ESC[33mcommit d006bf3fa576f22ba26ec10ff3e3dddeb27235dcESC[m
Author: Katacoda Scenario <[email protected]>
Date:   Sat Oct 10 08:58:25 2020 +0000

    Initial Commit   //おそらくkatacodaの中でgit initが行われておりそのログと思われる
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        untracked.js

nothing added to commit but untracked files present (use "git add" to track)

ここで注目するところは、git logコマンドは追跡されているファイルを自動的に(内部的に)git commitしているということ
と認識しているが、もし間違っていたらご指摘ください

Step 6 - Git Show

git logはコミットの作成者とメッセージを示しますが、コミットで行われた変更を表示するには、コマンドgit showを使用

$ git show
ESC[33mcommit 68e9f2f3b092f0133b087c8f35599c31f5cb66e8ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[
Author: Katacoda Scenario <[email protected]>
Date:   Sat Oct 10 09:22:11 2020 +0000

    Changed the output message in committed.js

ESC[1mdiff --git a/committed.js b/committed.jsESC[m
ESC[1mindex 12e7e7c..fc77969 100644ESC[m
ESC[1m--- a/committed.jsESC[m
ESC[1m+++ b/committed.jsESC[m
ESC[36m@@ -1 +1 @@ESC[m
ESC[31m-console.log("Committed File")ESC[m
ESC[32m+ESC[mESC[32mconsole.log("Demostrating changing a committed file")ESC[m