git でログファイルなどを、バージョン管理から外す方法(.gitignore)

log なんかはすぐに更新されてしまうので、その都度 commit なんてやってられません。SVN を使ってるとき ignore 指定ができたので、git でもできるだろうと思って調べてやってみました。
前提として、/home/www/hoge 以下をバージョン管理するものとします。ここでは、リポジトリの作成から行います。

リポジトリを作成

まず、hoge ディレクトリを作成し、リポジトリを作成します。

$ cd /home/www/
$ mkdir hoge
$ cd hoge
$ git init  # リポジトリを作成するコマンド
Initialized empty Git repository in /home/www/hoge/.git/  # リポジトリできたよーって言う表示

バージョン管理からはずしたいファイルのリストを作成

今回は、log ディレクトリ以下と tmp ディレクトリ以下を無視するよう設定します。
リポジトリのルートディレクトリに、無視リストのファイル(.gitignore)を作成します。

$ vim .gitignore
 ###↓下記を入力して保存 ###
 log/*    # ←いらないかもしれません
 log/**/*
 tmp/**/*
 ###↑ココまで ###


Git はデフォルトで空のディレクトリを無視するため、ログファイルが出力されていない状態で、log/ という名前のディレクトリ以下のファイルを無視したいという場合は、.gitignore に log/* を加えた上で log/.gitignore を作成します。
log/.gitignore は、空ファイルで OK です。tmp も同様にします。こうすることで、ディレクトリの中身だけ、無視してくれるようになります。

$ touch log/.gitignore
$ touch tmp/.gitignore


ここで、/home/www/hoge 以下のファイルを全て(log, tmp ディレクトリ以外)追加します。add の後の「.」を忘れないように気をつけます。

$ git add .


念のためステータスを確認しておくとよいです。(log 以下が追加されていないこととか。)
※追加したファイルがあまりに多かったので、grep しています。

$ git status | grep 'log'
#	new file:   app/controllers/timelog_controller.rb
#	new file:   app/helpers/timelog_helper.rb
#	new file:   app/views/account/login.rhtml
#	new file:   app/views/my/blocks/_timelog.rhtml
#	new file:   app/views/projects/changelog.rhtml
#	new file:   app/views/timelog/_date_range.rhtml
#	new file:   app/views/timelog/_list.rhtml
#	new file:   app/views/timelog/_report_criteria.rhtml
#	new file:   app/views/timelog/details.rhtml
#	new file:   app/views/timelog/edit.rhtml
#	new file:   app/views/timelog/report.rhtml
#	new file:   test/functional/timelog_controller_test.rb
#	new file:   vendor/rails/activerecord/test/assets/example.log
#	new file:   vendor/rails/activesupport/lib/active_support/buffered_logger.rb
#	new file:   vendor/rails/activesupport/lib/active_support/clean_logger.rb
#	new file:   vendor/rails/activesupport/lib/active_support/core_ext/logger.rb
#	new file:   vendor/rails/activesupport/test/buffered_logger_test.rb
#	new file:   vendor/rails/activesupport/test/clean_logger_test.rb
#	new file:   vendor/rails/railties/configs/empty.log
#	new file:   vendor/rails/railties/lib/rails_generator/simple_logger.rb
#	new file:   vendor/rails/railties/lib/tasks/log.rake


大丈夫そうなので、コミットしちゃいます。(メッセージは適当。)

$ git commit -m 'first commit'


これで、ブラウザから Redmine を見て、ログが吐かれてもステータスが modified にはならないはずです。