Windows機にGit入れて使うメモと勉強したことメモ

インストール

まずダウンロード。コマンドライン版を入れる。

  • msysgit - Project Hosting on Google Code
    ここの「Download」から「msysGit-fullinstall-1.6.4-preview20090729.exe」をダウンロード&インストール。
    どうでもいいがインストール中はぼーっとしてた。

インストールが終わったらコマンドを入力してみる。

$ git --version
git version 1.6.4

応答が返ってきたのでインストール成功したとみなす。

リポジトリ作成

次にリポジトリ作成する。

## ディレクトリ作成
$ cd C:\repos
$ mkdir sample
## ディレクトリへ移動
$ cd C:\repos\sample
## リポジトリ作成
$ git init
Initialized empty Git repository in c:/repos/sample/.git/

できた。リポジトリできた。そして「.git」というディレクトリができた。

新規ファイルまたは新規ディレクトリのコミット

新規ファイルを作成してみる

## ディレクトリ作る
$ mkdir app
$ cd app
$ pwd
/c/repos/sample/app
## ファイル作る
$ echo -n > sample.txt
## addする
$ git add .
## ステータス見る
$ git status
# On branch master
# 
# Initial commit
# 
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
# 
#       new file:   sample.txt
# 
## コミットする
$ git commit -m 'test'

オプションの「-m」はメッセージの「m」。
「addする」と「コミットする」については後述。

ステータスを見た際に「sample.txt」しか表示されていない理由も後述。

ユーザー設定する

「誰が」「いつ」「どのような」更新を加えたかを保存するための、「誰が」の部分を設定する。
これを設定しておかないと Author が unknown となってしまう。これは困る。

## ユーザー名を kmizukix に
$ git config --global user.name kmizukix
## メールアドレスを kmizukix@hogehage に
$ git config --global user.email kmizukix@hogehage
## 確認
$ git config -l
## 〜略〜
user.name=kmizukix
user.email=kmizukix@hogehage
## 〜略〜

これで、コミットした場合に「誰が」操作を行ったのかわかるようになった。

ちなみに、オプションに「--global」を付けない場合は、現在のリポジトリ以下にのみ反映される設定ができる。

## 別のリポジトリを作成&そちらへ移動
$ cd ../
$ mkdir sample2
$ git init
## ユーザー名設定
$ git config user.name kmizukix-sample2
## 設定を見る
$ git config -l
## 〜略〜
user.name=kmizukix
user.email=kmizukix@hogehage
## 〜略〜
user.user=kmizukix-sample2
## 〜略〜

名前が増えてる。

## 元のリポジトリへ戻る
$ cd ../sample
## 設定を見る
$ git config -l
## 〜略〜
user.name=kmizukix
user.email=kmizukix@hogehage
## 〜略〜

うん。

「addする」「コミットする」について

とりあえず

## sampleリポジトリへ移動
$ pwd
/c/repos/sample
## app/sample.txt を編集
## ここではファイル内に「sample」という文字を記載した
## ステータスを見る
$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git chackout -- <file>..." to discard changes in working directory)
# 
#       modified:   sample.txt
# 
no changes added to commit (use "git add" and/or "git commit -a")
## 差分を見る
$ git diff
diff --git a/app/sample.txt b/app/sample.txt
index e69de29..eed7e79 100644
--- a/app/sample.txt
+++ b/app/sample.txt
@@ -0,0 +1 @@
+sample
\ No newline at end of file

ここで見ている差分は「HEAD」と「実ファイル内」の差分。
確かに更新した箇所が差分として表示された。

## 「addする」
$ git add .
## ステータスを見る
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
# 
#       modified:   sample.txt
# 
## ここで、またファイル内容を変更する
## 例として、変更前「sample」→変更後「sample text」
## 差分を見る
$ git diff
diff --git a/app/sample.txt b/app/sample.txt
index eed7e79..679aa53 100644
--- a/app/sample.txt
+++ b/app/sample.txt
@@ -1 +1 @@
-sample
\ No newline at end of file
+sample text
\ No newline at end of file
## 「addする」でaddした時点での差分を見る
$ git diff --cached
diff --git a/app/sample.txt b/app/sample.txt
index e69de29..eed7e79 100644
--- a/app/sample.txt
+++ b/app/sample.txt
@@ -0,0 +1 @@
+sample
\ No newline at end of file

「addする」というのはステージングへファイルの変更内容(コミットする内容)を保存する行為のようなもの、らしい。
「HEADと実ファイルの差分」を見るときは「git diff」コマンドで。
「addした内容(コミット準備された内容)」を見るときは「git diff」コマンドに「--cached」オプションを付けた「git diff --cached」で見れる。

## コミットする
$ git commit -m 'add text'
## 差分を見る
$git diff
diff --git a/app/sample.txt b/app/sample.txt
index eed7e79..679aa53 100644
--- a/app/sample.txt
+++ b/app/sample.txt
@@ -1 +1 @@
-sample
\ No newline at end of file
+sample text
\ No newline at end of file
## 「addする」でaddした時点での差分を見る
$ git diff --cached
## 表示結果なし

コミットすると、コミット準備の内容が消えるので「git diff --cached」で何も表示するものがなくなっている状態となる。

ステータスを見た際にファイルしか表示されない理由

そもそもGitでは空のディレクトリはコミットされない。あくまでファイルを管理するものであり、空のディレクトリなぞコミットしても意味が無いから、らしい。

この辺は「入門git」の45ページにある「空のディレクトリを追跡する」を読めばいいと思った。多分。

コミットログを見る

ログを見るコマンド

$ git log

件数を指定してログを見る(例:1件、3件、10件)

$ git log -1
$ git log -3
$ git log -10

ブランチ作る

「master」から「br01」というブランチを作成

$ git branch br01 master

「master」から作成したブランチ「br01」へ移動

$ git checkout br01
Switched to branch 'br01'
$ git status
# On branch br01

「master」からブランチ「br02」を作成し移動

$ git status
# On branch master
$ git checkout -b br02 master
Switched to a new branch 'br02'
$ git status
# On branch br02

そうだ、ここで気をつけなければいけないのは、ブランチを作成してもそれぞれに該当するディレクトリが作成されるわけではない、という事。

ブランチの確認

$ git branch
  br01
* br02
  master

「*」は自分が「br02」にいることを示す。

マージ

「br02」での更新内容を「master」へ反映させる。

##「br02」でファイルを更新
$ echo 'br02 test' > sample.txt
## 「br02」へコミット
$ git add .
$ git commit -m 'br02 test'
## マージ先へ移動
$ git checkout master
## マージする
$ git merge br02
## マージされたコミットログがあることを確認
$ git log -1
Author: kmizukix <kmizukix@hogehage>
Date:   Thu Dec 31 05:20:29 2009 +0900
 
    br02 test

msysgitの起動

なんで最後になったのか不思議。

git -bash

自分の環境ではこれが認識されなかった。何かミスったくさいが気にしない。

msysgitのインストール先にある「C:\msysgit\msysgit\msys.bat」これを叩けば起動した。


今日はここまで