ProGit Chapter 2 その2
前回途中で読むのをやめたのでProGit Chapter2から。
作業コピー内のファイルについて
untracked | 追跡されてない(追加されてない) |
unmodified | 追跡されているが変更なし |
modified | 追跡されていて変更されている |
staged | ステージされている |
最初にファイルを配置したときはuntrackedで、
git addでステージされてcommitでunmodifiedに、
そこから変更を加えてmodifiedに、
git addでステージされてcommitという流れかな。
ファイルの状態の確認にはgit statusを使う。
新しいファイルの追跡にはgit addを使う。
ファイルを編集した場合にもgit addを使う。
git addをした後にファイルを編集すると、
git addをした直後のままの状態でステージされるので、
再度git addをする必要があるとかなんとか。面倒だなあ。
ファイルを無視する場合は.gitignoreファイルを配置する。
Mercurialの.hgignoreみたいな。
*.[oa] *~ .*.swp .DS_Store
のような書式らしい。
- 空行もしくは#で始まる行は無視
- 標準のglobパターンを使用可能
- ディレクトリを指定する際には最後にスラッシュ(/)を付ける
- 意味を逆転させる場合は最初に感嘆符(!)を付ける
変更したけどステージしてないファイルの変更点を見る場合はgit diffを実行する。
ステージされたファイルの変更点を見たい場合はgit diff --cachedを使う。
1.6.1以降はgit diff --stagedも使えると。
すべてステージした場合、git diffでは何も表示されない。
ステージしたファイルをコミットするにはgit commitを。
これを実行すると指定したエディタが起動する。
普通は面倒なのでgit commit -m "messsage"を使うと思うけど……
毎度毎度ステージするのが面倒な場合はgit commit -aなどで自動的に
ステージしてからコミットできる。
ファイルを削除して追跡対象から外す場合はgit rmを使う。
この場合、削除対象のファイルがステージされる。
既にステージされているファイルを削除するのはgit rm -fを使う。
ファイル事態は作業ツリーに残したまま追跡対象から外す場合、
git rm --cached filenameとする。
git rmでglobを使う場合、git rm \*~のようにバックスラッシュで
エスケープする。シェルによる展開を防いで、Gitが自前で展開を行うからだそうな。
ファイルの移動にはgit mvを使う。これは実際の所、
$ mv filename1 filename2 $ git rm filename1 $ git add filename2
と同じ意味だそうな。Mercurialと同じくaddとremoveという感じか。
なかなか長かったなー。でも基本だし一番大事な所かな。
実際に実行してみて覚えないと。