Gitを使った分散開発管理3 – リポジトリの作成とファイル追加

2011.07.11

リポジトリを作成してみる

前回、Gitのセットアップと初期設定ができたので、Gitを使ってはじめてのプロジェクトを作成します。

exampleという名前のディレクトリを作成し、その中でgit initコマンドを実行してみましょう。

$ mkdir example 
$ cd example/ 
$ git init Initialized empty Git repository in /pgdev/srcs/example/.git/

コマンドを実行すると、.gitという名前のディレクトリがexampleディレクトリ内にできています。これだけでリポジトリが作成され、exampleディレクトリ以下においてプロジェクトを追跡する準備ができました。

ファイルの追加

ではまずファイルを追加しましょう。hello.htmlという名前で単純なhtmlファイルをexampleディレクトリに作成します。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Hello Git!</title>
</head>
<body>
  <h2 id="toc-hello-git">Hello Git!</h2>
</body>
</html>

このファイルを管理する旨をリポジトリに伝えるため、addコマンドを使用します。

 $ git add hello.html

こうすることで、hello.htmlファイルがコミット可能になりました。これをGitでは「ステージされる」と言います。直接コミットすれば楽なのに。。と思うかもしれませんが、このステージングエリア(コミット調整場所)があることで、無駄なコミットをせずに、本当に必要なコミットのみを吟味して行うことができます。なお、addした後にファイルを変更しても、コミット時にコミットされるのはaddした状態のファイルです。もし変更後のファイルをコミットしたい場合、もう一度addを実行してください。

git addにはいくつものオプションがあります。例えば、-u(--update)オプションを使用すれば、新しく作成されたファイルはステージせず、すでにステージされたファイルの更新を行います。

-A(--all)は、新規に追加されたファイルも含め、ステージングします。また、add時に-iオプションを使用すると、インタラクティブモードが起動します。

$ git add -i
           staged     unstaged path
  1:       +10/-0      nothing hello.html

*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now>

インタラクティブモードでは、コマンドを1つずつ選択しながらステータス確認やaddを実行することができます。

元に戻したいときは?

コミットをする前にもう少し解説をします。いまは1つのファイルしかaddしませんでしたが、機能追加や修正は複数のファイルにまたがることも多いと思います。面倒なのでまとめてaddしてしまって、ローカルの設定を記述したファイルなどのコミットしてはいけないファイルまでaddしてしまった場合はどうすればよいでしょうか?

そのような場合、addを取り消すことが出来ます。まずgit diffでコミットされる予定の内容を確認します。

$ git diff --cached 
diff --git a/hello.html b/hello.html
new file mode 100644
index 0000000..711011e
--- /dev/null
+++ b/hello.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="UTF-8">
+  <title>Hello Git!</title>
+</head>
+<body>
+  <h2 id="toc-hello-git1">Hello Git!</h2>
+</body>
+</html>

hello.htmlの追加内容が表示されます。ではhello.htmlのaddを取消してみましょう。

 $ git rm --cached hello.html

今回は単一のファイルを指定しましたが、ディレクトリを指定したい場合は-rオプションを指定します。rmでaddを取り消しても、ファイル自体はそのまま残ります。今回はまだ1度もコミットをしていないのでgit rmを使用してaddを取り消しています。一度でもコミットした後にaddの取り消しを行う場合、git resetコマンドを使用してください。

addを取消したので、現在のリポジトリの状態を確認してみます。 git statusコマンドを使用すると、変更が加えられたファイルを表示することができます。

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

addが取り消され、何もステージングされていないことがわかります。

ちなみに、git statusで-sオプションをつけると、もっと短縮したステータス表示を行うことが出来ます。もう一度ファイルをaddしてstatus確認をしましょう。

$ git add hello.html
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   hello.html
#

再びファイルがステージングエリアに登録されました。 これでコミットの準備はOKです。

さて今回は、Gitにおけるファイルのステージング方法やその取り消し、ステータスの参照方法などを解説しました。
次回はファイルのコミットから解説します。