.gitignoreの使い方メモ

備忘録です。まず毎回.gitignoreを作成するのは面倒なので、グローバルな設定ファイルとして作成します。保存場所はどこでも良いですが、以下の場合はホームディレクトリの直下に.gitignoreを作成します。

$ git config --global core.excludesfile ~/.gitignore


共通.gitignoreの内容ですが、僕の活動範囲だと以下のようになりました。プロジェクトに固有の条件は、プロジェクト以下の.gitignoreに記述する形になります。

# general
.DS_Store
*.zip
*.tar.gz
*.exe
*.bz2
.hg/
.gitignore

# backup
*~
*.bak

# gnu global
GPATH
GRTAGS
GSYMS
GTAGS

# c/c++/objc
a.out
*.o
*.a

# python
*.pyc
build/
dist/
*.egg-info
*.mo
bulkloader-log-*

# xcode
*.pbxuser

# action script
*.swf

# java
*.class

# yacc/lex
lex.yy.c
*.tab.c
*.tab.h

次に記述方法ですが、基本はワイルドカードで特定の拡張子を持つファイルを指定します。

# pngファイルは管理しない
*.png

# 但しtest.pngだけは例外
!test.png

# buildディレクトリ以下は管理しない
build/

# tmpディレクトリ以下は管理しないが、tmpディレクトリ自体は管理する
tmp/**/*

# 拡張子まとめて指定
*.[o|a]

大抵はこれでいいんですけど、気になるのは拡張子を持たない実行ファイルです。プロジェクトごとに名前も違うので毎度.gitignoreに追加するのが面倒ですね。そこで現在のディレクトリ以下に配置された拡張子を持たないバイナリファイルを、まとめて.gitignoreとして出力するpythonスクリプトを書きました。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os

def main():
  # file 列挙
  target_dir = '.'
  binary_files = []
  for (root, dirs, files) in os.walk(target_dir):
    for filename in files:
      parts = filename.split('.')
      if len(parts) == 1 and '\0' in open(filename, 'rb').read():
        binary_files.append(filename)

  # .gitignore出力
  output = open('.gitignore', 'w')
  for bf in binary_files:
    output.write(bf + "\n")
    print "added " + bf + " to .gitignore"
  output.close()

if __name__ == '__main__': main()

これで一通り.gitignoreが使えるようになりました。昨日OSが起動しなくなって、リポジトリの重要性を再認識しました。やや適当にあつかってたんですけど、これからはもう少しきちんと管理しようと思います。

Leave a Reply

Your email address will not be published. Required fields are marked *