gitの管理下から逃れる方法についてのあれこれ

photo by V Threepio

.gitignoreファイルについて

代表的なgitの追跡から逃れる方法。
このファイルに記載されているファイルは、gitの管理下に置かれなくなる。
注意点として、既にgitの管理下に置かれているファイルに対しては、.gitignoreファイルに記載しても無力なため、 git rm --cashe <ファイル名>などとして、gitから削除する必要がある。
当然ながら、リポジトリからファイル自体も削除されることに注意。

.gitignoreの作り方

Windowsの場合「.gitignore」というファイル名では作成出来ないので、
「.gitignore.」(どっと ぎっといぐのあー どっと)というファイル名で保存する。
なお、サイトによっては「.ignore」でOKみたいなことも書いてあったりするけど、.gitignoreが正解。

また、.gitignoreの置き場所については、アプリケーションルートの直下に配置する。
ちなみにSourceTreeであれば、右上の設定からGUIで.gitignoreを作成することもできる。

.gitignoreを無視する方法

ignoreを無視してgitにコミットする裏ワザ的な方法が存在する。
git add -f <ファイル名>とすると、無視リストを無視するというよくわからない裏ワザが発動する。
ただし、このコマンドを実行したあとは.gitignoreの記述が変更され、次回からは通常どおりgitの管理下に置かれる。

.gitignoreの確認方法

$ git ls-files --others --ignored --exclude-standard

# 短縮形
$ git ls-files -oi --exclude-standard

このコマンドで、どのファイルがgit管理下に置かれていないか確認することができる。


git管理下には置きたいけれど今回のブランチに限り変更を追跡されて欲しくない時

2つ方法がある。

1.assume-unchanged

設定

git update-index --assume-unchanged <ファイル名>

取り消し

git update-index --no-assume-unchanged <ファイル名>

2.skip-worktree

設定

git update-index --skip-worktree <ファイル名>

取り消し

git update-index --no-skip-worktree <ファイル名>

ただし、どちらもブランチごとに有効なため、ブランチを切り直した場合はコマンドを再実行してやる必要がある。


どちらを使えばよいか?

基本的にskip-worktreeで良い。
イメージとしては、skip-worktreeは手元の変更を優先するが、 assume-unchangedリポジトリの変更を優先する。

そのため、git reset --hardを実行したような場合は、 assume-unchangedは手元の変更が失われる。

方向性として

assume-unchanged

更新確認しなくても良いファイルを無視することで、Gitの動作を高速化したいような場合に利用する。

skip-worktree

git管理下に置かれているファイルが、ビルドなどで更新されてしまうが、gitには基本的に無視して欲しいような場合に利用する。例えば日付だけ変わるファイルなど。