ファイルの一部分をgit ignoreする
Table of Contents
ファイルの一部分だけをgitの追跡対象外にする方法
経緯
intelephenseというPHPの言語サーバのライセンスキーをcoc-settings.json
に記述する必要があるが、coc-settings.json
自体は.dotfiles上で公開したい。
当然ライセンスキーをGitHub上に公開するわけにはいかないので、該当部分だけ追跡しないようにしたい。
やりたいこと
つまり
ひみつ // gitignore
や
// gitignore_start
ひみつ
ひみつ
ひみつ
// gitignore_end
と書くことで、git add
しても秘密情報だけステージングされないようにしたい。
方法
.gitconfig
に以下のように書く
.gitconfig
[filter "gitignore"]
smudge = cat
clean = "sed -e '/gitignore$/'d -e '/gitignore_start/,/gitignore_end/'d"
cleanフィルタの内容がミソ。ここで記述した内容がgitでステージングを行ったときに行われるので、
gitで追跡したくない箇所の前後にコメントとしてgitignore_start
,gitignore_end
を記述しておけば、
そこだけgit ignoreしているような挙動になる。
coc-settings.json
...
// gitignore_start
"intelephense.licenceKey": "~~~~~",
// gitignore_end
...
めでたしめでたし
上記ファイルは、実際にはjsoncというコメント可能なフォーマットで、コメントが書けない普通のjson等、ファイルの種類によってはこの方法では対処しきれないことに注意が必要。
参考文献
Read other posts