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 <scenario@katacoda.com>
Date: Sat Oct 10 09:00:32 2020 +0000
Changed the output message in committed.js
ESC[33mcommit d006bf3fa576f22ba26ec10ff3e3dddeb27235dcESC[m
Author: Katacoda Scenario <scenario@katacoda.com>
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 <scenario@katacoda.com>
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