作業ディレクトリの状態確認
Gitにおける作業ディレクトリ(作業ツリー)は、.gitフォルダが存在する場所そのものです(*1)。SVNなどの集中型のバージョン管理システムになれている利用者は、リポジトリと作業ディレクトリが一体になっていることに違和感を感じるかもしれません。
リスト5はサンプルとしてC#コンソールアプリケーションを作業ディレクトリにコピーし、その状態をgit statusコマンドで表示したものです。
$ git status
# On branch master
#
# Initial commit
#
# Untracked files: ... (1)
# (use "git add <file>..." to include in what will be committed) ... (2)
# # ConsoleApplication.csproj # ConsoleApplication.sln # ConsoleApplication.suo # Program.cs # Properties/ # bin/ # obj/ nothing added to commit but untracked files present (use "git add" to track)
(1)以降に表示されているファイルは、まだリポジトリに登録されていない未追跡ファイルとして表示されています。また、git statusコマンドでは次にどのようなコマンドを実行すればよいか、(2)のようなサジェスチョンを表示してくれます。この場合、次にgit addコマンドを使ってコミットに含められることを表しています。
リポジトリへ登録しないファイルの指定
先ほどのままでは、リポジトリに不要なファイルが追加されてしまいます。Gitの場合は、.gitignoreファイルを使い、リポジトリに追加したくないファイルやフォルダを指定します(リスト6)。
# コメント行です *.suo *.user bin/ obj/
記述方法は他のバージョン管理システムと大きな違いはありません。#で始まるコメント行や、*(アスタリスク)を使ったワイルドカード、フォルダを指定できます。再びgit statusコマンドを実行するとリスト7のように不要なファイルとフォルダが除かれていることが分かります。
$ git status ... # .gitignore # ConsoleApplication.csproj # ConsoleApplication.sln # Program.cs # Properties/
リポジトリへのファイル追加準備
未追跡のファイルをリポジトリへ追加していきますが、いきなりファイルをリポジトリへ追加することはできません。まず、ステージングエリア(末尾参照)と呼ばれるコミット前の準備場所に登録する必要があります。この操作には、git addコマンドを使用します(リスト8)。ただし、ファイルを追加するという意味のaddではなく、ステージングエリアに登録するという意味でのaddです。誤解しやすい部分なので注意してください。
$ git add . … $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: .gitignore # new file: ConsoleApplication1.csproj # new file: ConsoleApplication1.sln # new file: Program.cs # new file: Properties/AssemblyInfo.cs
引数にはファイルやフォルダを指定できます。フォルダを指定した場合は、そのフォルダ配下が再帰的に追加されます。
リポジトリへのコミット
ステージに登録されたファイルをリポジトリに反映するには、commitコマンドを使います(リスト9)。
$ git commit [master (root-commit) 1b45bec] 初期コミット 5 files changed, 129 insertions(+) create mode 100644 .gitignore create mode 100644 ConsoleApplication.csproj create mode 100644 ConsoleApplication.sln create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs
初期設定のままならば、Git Extensionによって登録されたエディタが開くので、コミットログを入力して操作を完了します。
ログの表示
続いてgit logコマンドでコミット内容の確認ができます(リスト10)。SVNのように数値のリビジョン番号は付きません。その代りコミットごとにID(SHA-1のハッシュ値)が付き、これらによって履歴を管理します。これらの番号は長ったらしくコマンドに指定するのがわずらわしいかもしれませんが、最低でも先頭4文字を指定し、他と重複しなければgitが勝手に番号を認識してくれます。
$ git log commit 1b45bec4f0f0d7fd5880457b929e902fbe545731 Author: statemachine <statemachine@example.com> Date: Wed Mar 20 09:17:25 2013 +0900 初期コミット --- $ git log 1b45 // 番号指定