OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2016/11/28

OSSでLinuxサーバ構築

Git 1.8.3.1のローカルリポジトリを使った基本的な開発の流れ

トップページOSSでLinuxサーバ構築 > Git 1.8.3.1のローカルリポジトリを使った基本的な開発の流れ
このエントリーをはてなブックマークに追加

概要

 Gitのローカルリポジトリを利用した開発を行うために、 Linux上にGitの環境を構築し、Gitの基本的なコマンド操作と出力結果を確認します。 あまり体系的・網羅的には整理できていませんが、基本的なコマンドで オプションの違いによる動作の違いや基点となる状態の違いからコマンドの結果が どう変わるのかを試しています。

構成

想定環境

 Linux上にGitをインストールしたスタンドアローン環境で Gitの操作を試しています。

クライアント構成

OSバージョン

CentOS 7.2.1511 x86_64

ソフトウェア・パッケージ一覧

  • git-1.8.3.1-6.el7_2.1.x86_64.rpm

手順

初期設定 (git init , git config)

ローカルリポジトリの作成

 開発で使用するディレクトリ(Gitのワーキングディレクトリ)を作成します。 今回は /data/git/ ディレクトリ配下に test.git という名前のディレクトリを作成し、 ここに開発するHTMLやCSSのソースコードを配置します。 また、作成した test.git ディレクトリ内にローカルリポジトリを作成します。

$ cd /data/git/
$ mkdir test.git
$ cd test.git/
$ git init
Initialized empty Git repository in /data/git/test.git/.git/
$ ls -al
total 4
drwxr-xr-x. 3 gituser01 gitgroup   17 Nov 25 00:21 .
drwxrwxrwx. 3 root      root       21 Nov 25 00:19 ..
drwxr-xr-x. 7 gituser01 gitgroup 4096 Nov 25 00:21 .git

開発者情報の設定

 今後リポジトリにコミットした際に記録されるユーザ名とメールアドレスを設定します。 設定した内容はLinuxユーザのホームディレクトリ内の .gitconfig ファイルに保持されます。 コマンドを打ち間違えた場合は、このファイルを直接編集しても構いません。

$ git config --global user.name "ranocci" ←ユーザ名
$ git config --global user.email webmaster@ranonet.com ←メールアドレス
$ cat ~/.gitconfig
[user]
        name = ranocci
        email = webmaster@ranonet.com

ローカルリポジトリの初期状態

 作成したローカルリポジトリの状態を確認します。 何もコミットされていないことが出力結果から分かります。

$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

ファイルを作成してコミット (git add , git commit)

ワーキングディレクトリにファイルを新規作成

 ワーキングディレクトリ(/data/git/test.git/)に新規で index.html ファイルを作成します。 Gitの状態を確認すると、トラッキングされていないファイルとして index.html が認識されています。

$ vi index.html
$ git status
# On branch master
#
# Initial commit
#
# Untracked files: ←トラッキングされていないファイルのリスト
#   (use "git add <file>..." to include in what will be committed)
#
#       index.html ←新規に作成したファイル
nothing added to commit but untracked files present (use "git add" to track)

作成したファイルをインデックスに追加

 作成した index.html ファイルを次回のコミット対象に含めるために、 インデックスへ追加(トラッキング対象に追加)します。

$ git add index.html
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed: ←次回のコミット対象ファイルのリスト
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   index.html ←ローカルリポジトリには存在しない新しいファイルとして認識
#

ローカルリポジトリに変更をコミット

 トラッキングされているファイルの変更をローカルリポジトリにコミットします。 今回の変更内容は index.html ファイルが新規に作成されたことなので、 この情報がローカルリポジトリにコミットされます。

$ git commit -m "My first commit"
[master (root-commit) 9b08f24] My first commit
 1 file changed, 6 insertions(+)
 create mode 100644 index.html
$ git status
# On branch master
nothing to commit, working directory clean

ディレクトリとファイルを作成してコミット (git add , git commit)

ワーキングディレクトリにディレクトリとファイルを新規作成

 ワーキングディレクトリに css ディレクトリを作成し、 そのディレクトリ配下に style.css ファイルを作成します。

$ mkdir css
$ vi css/style.css
$ git status
# On branch master
# Untracked files: ←トラッキングされていないファイルのリスト
#   (use "git add <file>..." to include in what will be committed)
#
#       css/ ←個々のファイルは表示されないようです
nothing added to commit but untracked files present (use "git add" to track)

新規作成したファイルをインデックスに追加

 作成した style.css をインデックスに追加します。 ディレクトリ構成も維持されます。

$ git add css/style.css
$ git status
# On branch master
# Changes to be committed: ←次回のコミット対象ファイルのリスト
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   css/style.css ←作成したディレクトリとファイルがトラッキング対象になった
#

ローカルリポジトリに変更をコミット

 トラッキングされているファイルの変更をローカルリポジトリにコミットします。 今回の変更内容は css/style.css ファイルが新規に作成されたことなので、 この情報がローカルリポジトリにコミットされます。

$ git commit -m "Add stylesheet"
[master 5b6be80] Add stylesheet
 1 file changed, 4 insertions(+)
 create mode 100644 css/style.css
$ git status
# On branch master
nothing to commit, working directory clean

コミットログの表示 (git log)

コミットログの表示

 これまでにローカルリポジトリにコミットした履歴を一覧表示します。 新しいコミットに関する情報が上に表示されます。

$ git log
commit 5b6be80a1c4818571ae5b733bf61f504877027ba ←2回目のコミット
Author: ranocci <webmaster@ranonet.com>
Date:   Fri Nov 25 00:31:44 2016 +0900

    Add stylesheet

commit 9b08f24a1dc3bbdb5accbbea52807d3e20db0b8b ←1回目のコミット
Author: ranocci <webmaster@ranonet.com>
Date:   Fri Nov 25 00:27:56 2016 +0900

    My first commit

ファイルを編集してコミット (git add , git commit)

 以前コミット済みでトラッキングされているファイルを編集し、変更をコミットします。 ファイルを新規作成した場合と操作の流れは全く同じですが、git status コマンドでの 状態の見え方が違うので、サンプルとして載せておきます。

ワーキングディレクトリの既存ファイルの編集

 index.html ファイルは既にローカルリポジトリにコミット済みでトラッキングされているため、 ファイルを編集して git status コマンドを実行すると、「modified」と表示され、 変更が認識されていることが分かります。

$ vi index.html
$ 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:   index.html
#
no changes added to commit (use "git add" and/or "git commit -a")

編集したファイルをインデックスに反映

 git add コマンドを実行して状態を確認すると、次回のコミット対象ファイルに 登録されていることが分かります。

$ git add index.html
$ git status
# On branch master
# Changes to be committed: ←次回のコミット対象ファイルのリスト
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   index.html
#

ローカルリポジトリに変更をコミット

 ローカルリポジトリに変更をコミットします。 標準出力に変更内容の概要が表示され、1つのファイルが変更され、 3行新しく追加されたことが分かります。

$ git commit -m "Modify index"
[master 8c1f7b9] Modify index
 1 file changed, 3 insertions(+) ←前回のコミットから1つのファイルで3行追加されたことが分かる
$ git status
# On branch master
nothing to commit, working directory clean

ワーキングディレクトリの変更をまとめてインデックスに反映 (git add --all)

 通常の開発では複数のファイルを作成・編集するので、変更した個々のファイルを指定して リポジトリに反映するのは煩雑です。そんな時はワーキングディレクトリ内の変更をまとめて インデックスへ登録します。 もしワーキングディレクトリ内にコミットしたくないファイルが含まれている場合は、 .gitignore ファイルに対象ファイルを記述することで除外することができますが、 今回は詳細はを割愛します。

ワーキングディレクトリの既存ファイルの編集と新規ファイルの作成

 ワーキングディレクトリ内で既存ファイルの編集、新規ファイルの作成を行います。

$ vi index.html
$ vi css/style.css
$ vi contuctus.html
$ 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:   css/style.css
#       modified:   index.html
#
# Untracked files: ←トラッキングされていないファイルのリスト
#   (use "git add <file>..." to include in what will be committed)
#
#       contuctus.html
no changes added to commit (use "git add" and/or "git commit -a")

編集・新規作成したファイルをまとめてインデックスに反映

 git add コマンドでファイルを個々に指定するのではなく、--all オプションを付与して実行します。 新規に作成ファイルも編集されたファイルもまとめて次回のコミット対象に含まれていることが分かります。 インデックスへの反映までなので、コミットは別途実行する必要があります。

$ git add --all
$ git status
# On branch master
# Changes to be committed: ←次回のコミット対象ファイルのリスト
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   contuctus.html
#       modified:   css/style.css
#       modified:   index.html
#

ローカルリポジトリに変更をコミット

 ローカルリポジトリに変更をコミットします。 前回のコミットから3つのファイルが変更され、計18行が新たに追加されたことが分かります。

$ git commit -m "Add Contuct us"
[master e403abb] Add Contuct us
 3 files changed, 18 insertions(+) ←前回のコミットから3つのファイルで計18行追加されたことが分かる
 create mode 100644 contuctus.html
$ git status
# On branch master
nothing to commit, working directory clean

ディレクトリ単位でファイルをコミット (git add , git commit)

 ワーキングディレクトリのフィアルを作成・編集した際にディレクトリ単位でインデックスに登録することもできます。 ただし、空のディレクトリをトラッキングすることはできません。 git add コマンドで空のディレクトリを追加してもエラーにはなりませんが、 コミットする際にディレクトリが空のままだとリポジトリには登録されません。

ワーキングディレクトリに新規ディレクトリとファイルの作成

 今回は common ディレクトリを作成し、ディレクトリ内に _header.html と _footer.html を新規に作成します。

$ mkdir common
$ vi common/_header.html
$ vi common/_footer.html
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       common/
nothing added to commit but untracked files present (use "git add" to track)

新規作成したディレクトリとファイルをディレクトリ単位でインデックスに追加

 git add コマンドで common ディレクトリを指定すると、 ディレクトリ内のファイル全てがインデックスに追加されます。

$ git add common
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   common/_footer.html
#       new file:   common/_header.html
#

ローカルリポジトリに変更をコミット

 コミットに関しては特に他と変わりありません。

$ git commit -m "Add common files"
[master d0aef15] Add common files
 2 files changed, 4 insertions(+)
 create mode 100644 common/_footer.html
 create mode 100644 common/_header.html
$ git status
# On branch master
nothing to commit, working directory clean

トラッキングされているファイルの変更を直接コミットする (git commit -a)

 ワーキングディレクトリでのファイルの編集後、1つのコマンドでインデックスへの登録と ローカルリポジトリへのコミットを行います。 トラッキングされていないファイルはコミットされないため、事前にインデックスに登録しておくか、 後から個別にコミットする必要があります。

ワーキングディレクトリの既存ファイルの編集と新規ファイルの作成

 既存ファイルの編集と新規ファイルの作成を行います。

$ vi contuctus.html
$ vi common/_header.html
$ vi aboutus.html
$ 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:   common/_header.html
#       modified:   contuctus.html
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       aboutus.html
no changes added to commit (use "git add" and/or "git commit -a")

トラッキングされているファイルの編集をインデックスへの登録とコミットをまとめて実行

 git commit -a コマンドを実行すると、トラッキングされているファイルの編集を インデックスに登録し、そのままローカルリポジトリにコミットします。 トラッキングされていないファイルはコミット対象になりません。

$ git commit -am "Modify some files"
[master 073d814] Modify some files
 2 files changed, 8 insertions(+)
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       aboutus.html ←コミットされずに残る
nothing added to commit but untracked files present (use "git add" to track)

新規作成したファイルをインデックスに登録

 コミットされなかったファイルをインデックスに登録します。 普通は先に全ファイルがトラッキングされた状態にしてからコミットしますが、 今回は git コマンドの動作を確認するためあえて別の流れで実行しました。

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

ローカルリポジトリに変更をコミット

 最後にコミットして終わりです。

$ git commit -m "Add About us"
[master 0dff479] Add About us
 1 file changed, 2 insertions(+)
 create mode 100644 aboutus.html
$ git status
# On branch master
nothing to commit, working directory clean

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会


第000414号