.gitignoreの存在を我々は見過ごしてはならない。

  • 264
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

.gitignoreとは?

.gitignoreはGitのリポジトリのルート(.gitフォルダと同じ位置)にあるときに使えます。

Railsの場合

Railsアプリとかだと、logディレクトリはバージョン管理したくないから

log/

とか書いてある。
同じように、バージョン管理の必要性がなかったり、していると不都合がおきる、
- sqlite3のDBファイル
- キャッシュが入るtmpフォルダ
- プロセス監視のpidファイル
等はignoreしておくべきです。(デフォルトで.gitignoreに書かれていますが)

.gitignore自体はignoreにするべき?

それを ignore するなんて とんでもない!
.gitignoreはプロジェクト全体で共有しておくと、環境が変わっても(パソコンが変わっても)ignoreされるファイルやフォルダは 一緒な"はず" なので、ignoreはしなくて大丈夫です。

一緒な"はず" ?

環境が変わるってことはもしかしたら他人が使うこともあるのです。
たとえば、僕みたいにEmacsとVimとSublimeを併用するときには、同じ人でありながら違う環境でコードを書くことさえあります。一般的にあまりないですが。

環境が違うとは

例えば使っているエディタが違うときがありますね。
これは、Vimにおける*.swpファイルやEmacsにおける*~ファイルが該当しますね。
こういうのはもちろん ignore しておくべきですが、
プロジェクト毎、リポジトリ前に .gitignore

*~
*.swp

と書くのは面倒ですしおすし、
さらにプロジェクトメンバーにEmacs使いとVim使いが共存している中で、共通で見ることができる .gitignore*.swp*~などを記述してそれぞれのエディタの痕跡が残ってしまうと戦争になりかねません。

毎回、同じファイルを ignore するのは面倒、でも戦争も起こしたくはない

基本的に、DRY(Don't repeat yourself)という考え方で世の中は回っています。
つまり同じ事は一回だけにしようってことですね。GitでもDRYな .gitignore の書き方ができます。
まずはホームフォルダに.gitignore.gitconfigファイルをつくります。
それぞれ中身は

.DS_Store
*~
*.swp

こんな感じで書いて

[core]
    excludesfile = ~/.gitignore

と書いておきます。
すると、Gitさんは基本的にホームフォルダにある.gitconfigを見に行くので。

  1. excludefileで指定された.gitignoreをみる
  2. リポジトリのルートにある.gitignoreをみる

という順序で見ていくので、
自分の環境に依存して、かつGitではバージョン管理をしたくない時にはホームフォルダの.gitignoreにファイルを記述して、
プロジェクトでバージョン管理したくないファイルをリポジトリ内にある.gitignoreに記述してメンバー全員で共有する

というのがベストプラクティではないでしょうか。

あわせて読みたい

Gitの設定