情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Gitを使用する

Gitとは

Gitとはリポジトリのバージョン管理を行うためのソフトウェアです。

リポジトリとはバージョン管理の対象となるフォルダです。

すなわち、Gitではあるフォルダの下にあるファイルのバージョン管理を行います。

勿論、リポジトリは複数作成することができます。

Gitはソフトウェアプロジェクトのソースコードやドキュメントを管理するために使用されることが多いですが、その他のファイル一式のバージョン管理を行うために使用することもできます。

正しくインストールされている場合、Gitはコマンドプロンプトでgitというコマンドを実行すれば起動することができます。

コマンドライン引数を指定しないでGitを起動した場合には主なコマンドに対する説明が表示され、すぐに終了します。

C:\work\git>git
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Forward-port local commits to the updated upstream head
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

リポジトリの作成

リポジトリを作成するにはリポジトリとしたいフォルダにおいてgit initコマンドを実行します。

リポジトリを作成するとリポジトリのフォルダには.gitという名称のフォルダが作成されます(このフォルダは隠しフォルダとなります)。

このフォルダにはバージョン管理に関するデータが格納されます。

そのため、このフォルダのファイルを削除したり、データを変更してはなりません。削除したり、変更したりしてしまうとリポジトリが壊れます

実演

C:\work\git\project1git initコマンドを実行してリポジトリを作成してみます。

C:\work\git\project1>git init
Initialized empty Git repository in C:/work/git/project1/.git/

dir /aコマンドを実行して隠しファイルやフォルダを含めたファイルやフォルダの一覧を表示してみると.gitフォルダが作成されていることが分かります。

C:\work\git\project1>dir /a
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git\project1

2016/08/21  16:03    <DIR>          .
2016/08/21  16:03    <DIR>          ..
2016/08/21  16:03    <DIR>          .git
               0 File(s)              0 bytes
               3 Dir(s)  30,139,060,224 bytes free

dir .gitコマンドを実行して.gitフォルダのファイルやフォルダの一覧を表示してみると様々なファイルやフォルダが作成されていることが分かります。

C:\work\git\project1>dir .git
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git\project1\.git

2016/08/21  16:03               157 config
2016/08/21  16:03                73 description
2016/08/21  16:03                23 HEAD
2016/08/21  16:03    <DIR>          hooks
2016/08/21  16:03    <DIR>          info
2016/08/21  16:03    <DIR>          objects
2016/08/21  16:03    <DIR>          refs
               3 File(s)            253 bytes
               4 Dir(s)  30,139,056,128 bytes free

コミットとは

リポジトリのフォルダに新しいファイルを作成したり、既存のファイルのデータを変更したりするだけではファイルのバージョン管理は行われません。

実際には、リポジトリのフォルダに新しいファイルが作成されたり、既存のファイルのデータが変更されたりした場合にはGitはそのことを認識しますが、自動的にファイルの新規作成やファイルのデータの変更が記録されることはありません。

そのような記録(すなわち、バージョン付け)は明示的に行う必要があります。

この記録を行うことをコミットと言います。

コミット対象の追加

コミットを行うにはまずコミット対象のファイルを指定する必要があります。

コミット対象はコミットを行う毎にリセットされますので、コミットを行う前には毎回この指定を行わなければなりません。

コミット対象を追加するにはリポジトリのフォルダにおいてgit addコマンドを実行します。

第1引数にファイル又はフォルダのパスを指定します。フォルダのパスを指定した場合には前回のコミット以降に新規作成されたか変更されたフォルダ内の全てのファイルがコミット対象に追加されます。

あるいは、ファイルやフォルダのパスのパターンを指定することもできます。たとえば、リポジトリのフォルダの全てのCSVファイルをコミット対象に追加するにはgit add *.csvとします。

あるいは、.を指定した場合には前回のコミット以降に新規作成されたか変更された全てのファイルがコミット対象に追加されます。

コミット対象に指定したファイルは次のコミットにおけるコミット対象となります。

コミット

コミットを行うにはリポジトリのフォルダにおいてgit commitコマンドを実行します。

--messageオプションか-mオプションにコミットの記録に付加するメッセージを("で囲んで)指定します。メッセージは必ず指定しなければなりません

コミットを行うとコミット対象の新規作成や変更がリポジトリに記録されます。

コミット履歴のチェック

コミット履歴をチェックするにはリポジトリのフォルダにおいてgit logコマンドかgit shortlogコマンドを実行します。

git logコマンドで表示される情報の方がより詳細でgit shortlogコマンドで表示される情報の方がより簡潔です。

実演

上で作成したリポジトリでコミットを試してみます。

まず、コミット対象とするファイルを作成しましょう。

textfile.txtという名称のテキストファイルを作成してみます。

C:\work\git\project1>echo this is text file. > textfile.txt

git addコマンドを実行してtextfile.txtをコミット対象に追加します。

C:\work\git\project1>git add textfile.txt

git commitコマンドを実行してコミットを行います。

C:\work\git\project1>git commit --message "one text file create."
[master (root-commit) cd7cddd] one text file create.
 1 file changed, 1 insertion(+)
 create mode 100644 textfile.txt

git logコマンドを実行してコミット履歴をチェックしてみます。コミットが行われていることが分かります。

C:\work\git\project1>git log
commit cd7cddd51690c42be7432294680bc09983bc0d22
Author: pizyumi <aih@hotmail.com>
Date:   Fri Sep 9 11:12:23 2016 +0900

    one text file create.

git shortlogコマンドを実行してコミット履歴をチェックしてみます。簡潔なコミット履歴が表示されることが分かります。

C:\work\git\project1>git shortlog
pizyumi (1):
      one text file create.

ファイルの移動や名称変更

リポジトリのファイルを移動したり、名称を変更したりするにはリポジトリのフォルダにおいてgit mvコマンドを実行します。

第1引数に移動又は変更前のファイルのパスを指定します。

第2引数に移動又は変更後のファイルのパスを指定します。

実演

dirコマンドを実行して上で作成したリポジトリのフォルダのファイルやフォルダの一覧を表示してみるとtextfile.txtというファイルが存在していることが分かります。

C:\work\git\project1>dir
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git\project1

2016/09/09  11:12    <DIR>          .
2016/09/09  11:12    <DIR>          ..
2016/09/09  11:12                21 textfile.txt
               1 File(s)             21 bytes
               2 Dir(s)  28,760,072,192 bytes free

git mvコマンドを実行してこのファイルの名称をtextfile2.txtに変更してみます。

C:\work\git\project1>git mv textfile.txt textfile2.txt

dirコマンドを実行してファイルやフォルダの一覧を表示してみるとtextfile.txttextfile2.txtに名称変更されていることが分かります。

C:\work\git\project1>dir
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git\project1

2016/09/09  11:12    <DIR>          .
2016/09/09  11:12    <DIR>          ..
2016/09/09  11:12                21 textfile2.txt
               1 File(s)             21 bytes
               2 Dir(s)  28,760,072,192 bytes free

コミットを行っておきます。

C:\work\git\project1>git add .

C:\work\git\project1>git commit -m "renamed."
[master 7e8df3c] renamed.
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename textfile.txt => textfile2.txt (100%)

ファイルの削除

リポジトリのファイルを削除するにはリポジトリのフォルダにおいてgit rmコマンドを実行します。

第1引数に削除するファイルのパスを指定します。

実演

dirコマンドを実行して上で作成したリポジトリのフォルダのファイルやフォルダの一覧を表示してみるとtextfile2.txtというファイルが存在していることが分かります。

C:\work\git\project1>dir
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git\project1

2016/09/09  11:14    <DIR>          .
2016/09/09  11:14    <DIR>          ..
2016/09/09  11:12                21 textfile2.txt
               1 File(s)             21 bytes
               2 Dir(s)  28,760,068,096 bytes free

git rmコマンドを実行してこのファイルを削除してみます。

C:\work\git\project1>git rm textfile2.txt
rm 'textfile2.txt'

dirコマンドを実行してファイルやフォルダの一覧を表示してみるとtextfile2.txtが削除されたことが分かります。

C:\work\git\project1>dir
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git\project1

2016/09/09  11:21    <DIR>          .
2016/09/09  11:21    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  28,760,068,096 bytes free

コミットを行っておきます。

C:\work\git\project1>git add .

C:\work\git\project1>git commit -m "delete"
[master 934751e] delete
 1 file changed, 1 deletion(-)
 delete mode 100644 textfile2.txt

リポジトリのチェック

リポジトリの状態をチェックするにはリポジトリのフォルダにおいてgit statusコマンドを実行します。

実演

git statusコマンドを実行して上で作成したリポジトリの状態をチェックしてみるとコミットできるファイルが存在しないことが分かります。

C:\work\git\project1>git status
On branch master
nothing to commit, working tree clean

textfile3.txtという名称のテキストファイルを作成してみます。

C:\work\git\project1>echo third text file. > textfile3.txt

git statusコマンドを実行してリポジトリの状態をチェックしてみるとコミット対象に指定されたファイルは存在しないもののリポジトリに履歴が存在しないtextfile3.txtという名称のファイルが存在していることが分かります。

C:\work\git\project1>git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        textfile3.txt

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

git addコマンドを実行してtextfile3.txtをコミット対象に追加します。

C:\work\git\project1>git add textfile3.txt

git statusコマンドを実行してリポジトリの状態をチェックしてみるとコミット対象に指定されたtextfile3.txtという名称の新規ファイルが存在していることが分かります。

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

        new file:   textfile3.txt

git commitコマンドを実行してコミットを行います。

C:\work\git\project1>git commit -m "new file."
[master 27b8c21] new file.
 1 file changed, 1 insertion(+)
 create mode 100644 textfile3.txt

git statusコマンドを実行してリポジトリの状態をチェックしてみると(textfile3.txtの新規作成は既にコミットされたため)コミットできるファイルが存在しないことが分かります。

C:\work\git\project1>git status
On branch master
nothing to commit, working tree clean
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Git