minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

リポジトリの新規作成

では早速新しいリポジトリを作って Git に触れてみることにしましょう。
何でもいいので、作業用ディレクトリを作成してみます。

$ mkdir prj1
$ cd prj1

ここで、リポジトリ新規作成コマンドを実行します。

$ git init

以下のようなメッセージが表示されるはずです。

Initialized empty Git repository in /path/prj1/.git/

これでリポジトリが作成されました。
メッセージからわかるように、リポジトリが今いるディレクトリと同じ場所に作成されています。
そう、Git はリポジトリを「作業ディレクトリ内」に作成します。

WORK_DIR
|-- .git
|-- file1
`-- folder
    `-- file2

これが SVN などとは大きく異なる点です。
ちなみに SVN では各ディレクトリ内(上で言うとfolderディレクトリ)に .svn が作成されますが
Git の .git ディレクトリは「リポジトリルート直下に一つだけ」作成されます。
上の例で言うと、WORK_DIR/.git です。WORK_DIR/folder/.git は作成されません。

ファイル作成

リポジトリが完成したので、早速ファイルを作ってみましょう。

$ echo "hello world" > file1

この状態で、Git の状態確認コマンドを実行してみます。

$ git status

以下のように出てくるはずです。

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       file1
nothing added to commit but untracked files present (use "git add" to track)

とても親切ですねー。
Untracked files として、今作成した file1 が表示されています。
track とは聞きなれない表現ですが、Git ではよく出てくるので覚えましょう。
「追跡」という意味です。要するにバージョン管理する対象ですね。

file1 がまだバージョン管理する対象にされていないので、add コマンドを使って track しましょう、と
Git が教えてくれています。
ではそうしましょう。

$ git add .

add の引数として現ディレクトリを指定しました。
こうすると、Git はそのディレクトリ配下の全ファイルを track 対象に追加します。
サブディレクトリ配下も全て、です。SVN とは随分違いますね。

ではもう一回状態を確認してみましょう。

$ git status
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   file1

最初の commit

コミットするべき(= まだされてない)ファイルがあることを告げています。
ではコミットしましょう。

$ git commit -m "initial commit"

-m によってコミットコメントを付けています。これを付けないと、エディタが起動してしまいます。
結果は以下のようになります。

[master (root-commit) 06a591a] initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file1

ここでは色々なことがわかります。

master というのは、現在のブランチの名前です。

(root-commit) というのは、リポジトリの初回コミット時のみ表示されるもので
特に気にする必要はないでしょう。

06a591a という謎の文字列は、このコミットに付けられたIDのようなものです。
これはいずれ気にする必要があるかもしれませんが、今のところはとりあえず必要ありません。

Git のブランチ

Git は SVN とは異なり、システム上明確にブランチという概念を持っています。
開発者は常に、どこかのブランチ上にいることになります。

リポジトリは複数のブランチを持つことができますが、
自分がいる作業ブランチ(Current Branch)は常に一つです。
CVS のように、ファイル毎に作業ブランチが異なったりはしません。
ここは重要な概念ですので、忘れないようにしましょう。