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という感じか。


なかなか長かったなー。でも基本だし一番大事な所かな。
実際に実行してみて覚えないと。