なうびるどいんぐ

脳みそ常時-3dB

【Git】gitignoreに追加せずに除外する簡単な方法

      HimaJyun

Gitでファイルを除外したい時はgitignoreを使うのが一般的だと思う。

ただ、gitignoreは基本的にGitで管理してリモートにpushされるものなので、私的なファイルの除外設定をここに追記するのはためらわれる。

というわけで、リモートにpushするgitignoreを変更せずにignoreする方法を考えたので書いておく。

スポンサーリンク

急いでいる人向け

ディレクトリ作成してその中に.gitignore作成して*を追加(.gitignoreに.gitignoreを指定)

ちなみに.git/info/excludeを使用する必要はない。

.gitignoreで.gitignoreを.gitignore

Gitでは.gitignoreに.gitignoreを指定できる。

この場合、Gitがファイルを追跡しなくなるだけで.gitignoreとしての効力は発揮される。

ディレクトリを活用

.gitignoreに.gitignoreを指定すると問題になるのが、.gitignoreが無視されるという事。(それを目的に指定してるんだし)

ということは、リモートにpushするための.gitignoreに.gitignoreを指定することはできない。

だが忘れてはないだろうか?.gitignoreはサブディレクトリでも配置できるという事を。

そう、答えは簡単、私的なファイルを入れるディレクトリを作成して、その中に.gitignoreを作ればいい。

そしてその.gitignoreではディレクトリ丸ごと無視するために*を指定する。こんな感じ。

プロジェクト
|- .git/
|- .gitignore <- これは触らない
|- memo/ <- これをすべて無視したい
||- .gitignore <- "*"を指定する
||- todo <- 無視される

これでリモートに公開されている.gitignoreに触れることなく特定のディレクトリを無視できる。

俺はこの方法でまだ考えてる途中の設計とかTODOを一緒にプロジェクトディレクトリに放り込んでいる(他のところに保存すると忘れるので)

Thumbs.dbとかそれ系統

Thumbs.dbとかを.gitignoreに追加せずに除外したい場合は今回の方法は使えない。

そういう物は~/.config/git/ignoreに指定しよう。

作成する場所を指定できない、つまりそれらのファイルはOSやIDEなどが自動で作成する。環境固有のファイルなので.gitignoreではなく~/.config/git/ignoreにしてグローバルに指定しましょう。

とは言うけど……

「リモートにpushする.gitignoreにThumbs.dbとか指定するな」とは言うけど……

俺的にはThumbs.dbも.DS_Storeもリモートにpushする.gitignoreに追加してしまって構わないと思う。

何故かというと、昨今のプロジェクトはOSSでGitHubなどに公開することが多いと思う。そうでなくても、複数人で開発するためにどこかのサーバーにpushしたりするだろう。

そうなればプルリクエストが送られてくる可能性は無きにしも非ずな訳であって、そしてプルリクを送ってくる奴がGitに詳しいとは限らない

善意で送られてきたプルリクにThumbs.dbなどのゴミが含まれていたとして、それを理由に拒絶するのは俺的には「厳しすぎる」と思うし、かと言って気にせずマージしてしまうのも履歴が汚れるから嫌。

だいたいどんなゴミが発生するのかある程度は予想できるんだから、コミットに入って欲しくないファイルがあるならあらかじめ.gitignoreに指定しておけよ。という理由である。

コミットに入って欲しくないファイルを指定するための.gitignoreで、コミットに入って欲しくないファイルを指定するなというのはおかしな話だろ?

俺はそう思う、他の人がそう思うかは知らないけど。

 - プログラミング