.gitignoreの範囲の指定方法
過去に書いた記事をそのまま移行します。
前提
$HOME
ディレクトリ上でドットファイルをgitを管理している。
.gitignoreはホワイトリスト方式で記述している。
やりたかったこと
$HOME └── .vim ├── bundle ├── snippet ├── syntax ├── template └── userautoload
上記の構造になっているvimの設定ファイルのbundle
ディレクトリ以外をgitの管理下に置きたい。
(bundle
ディレクトリだけはgitで管理したくない)
やったこと
ホワイトリスト方式で.gitignore
を設定したが、階層構造をとっている時の設定でつまずいた。
ダメだったパターン
以下のように記述したら$HOME/.vim/
以下のディレクトリ内部のファイルが読み込まれなかった。
# all file ignore /* /.* # target not ignore !/.gitignore !/.vimrc !/.vim/template/template.* !/.vim/userautoload/*.vim !/.vim/snippet/*.vim !/.vim/syntax/*.vim
よく考えると、上の3行ですべてのファイルとディレクトリを場外しているため、
$HOME/.vim
ディレクトリがそもそもgitから見えない。
そのため、!/.vim/userautoload/*.vim
のようにファイルを指定しても、
!/存在しないディレクトリ/userautoload/*.vim
となっているので、
読み込まれることがなかった。
成功したパターン
以下のように記述したら成功した。
# all file ignore /* /.* # target not ignore !/.gitignore !/.vimrc # .vim directry !/.vim/ /.vim/* !/.vim/template/ !template.* !/.vim/syntax/ !*.vim !/.vim/snippet/ !*.vim !/.vim/userautoload/ !*.vim
やっていることは、
!/.vim/
で$HOME/.vim/
ディレクトリをホワイトリストに追加/.vim/*
で$HOME/.vim/
以下のファイルとディレクトリを除外!/.vim/userautoload/
で該当のディレクトリをホワイトリストに追加!*.vim
で*.vim
ファイルをホワイトリストに追加
という感じ。
ただ、一つのファイルで管理すると見栄えが悪かったので以下のように分割。
# $HOME/.gitignore # all file ignore /* /.* # target not ignore !/.gitignore !/.vimrc !/.vim/
# $HOME/.vim/.gitignore # all file ignore /* /.* !/.gitignore # target not ignore !/template/ !template.* !/syntax/ !*.vim !/snippet/ !*.vim !/userautoload/ !*.vim
これで管理しやすくなった。