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