gitの管理下から逃れる方法についてのあれこれ
.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には基本的に無視して欲しいような場合に利用する。例えば日付だけ変わるファイルなど。