hnwの日記

.gitignoreを作ってくれるgiboが便利すぎる

gitignore-boilerplates(長いので以後giboと呼びます)という便利なツールを紹介します。これは.gitignoreのひな形を作ってくれるものです。


もう少し詳しく説明すると、giboは様々なOS・エディタ・言語・フレームワークなどに特化したファイルの情報を利用して、複数環境を考慮した.gitignoreを作ってくれます。


.gitignoreに入れたいファイルは環境ごとに変わってくるわけですが、各人がcommitしたくないファイルの存在に気づくたびにチマチマ.gitignoreに追記していくのって本当に無駄だと思うんですよね。giboはそれを自動化してくれるというわけです。


例えば、WindowsとMacOSXの2環境、Emacsとvimの2エディタを使う人がいるC言語のプロジェクトであれば、次のようにして.gitignoreを作ることができます。

$ gibo Windows OSX Emacs vim C >> .gitignore


この結果は次のようになります。ほぼ文句のない内容だと思いますが、いかがでしょうか。

### /Users/hnw/.gitignore-boilerplates/Global/Windows.gitignore

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/


### /Users/hnw/.gitignore-boilerplates/Global/OSX.gitignore

.DS_Store
.AppleDouble
.LSOverride
Icon


# Thumbnails
._*

# Files that might appear on external disk
.Spotlight-V100
.Trashes


### /Users/hnw/.gitignore-boilerplates/Global/Emacs.gitignore

*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
.elc
auto-save-list
tramp
.\#*

# Org-mode
.org-id-locations
*_archive


### /Users/hnw/.gitignore-boilerplates/Global/vim.gitignore

.*.sw[a-z]
*.un~
Session.vim
.netrwhist

### /Users/hnw/.gitignore-boilerplates/C.gitignore

# Object files
*.o

# Libraries
*.lib
*.a

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib

# Executables
*.exe
*.out
*.app


PHPを例に取れば、Eclipse、NetBeans、PhpStormといった統合開発環境や、Symfony、CakePHP、ZendFrameworkといったフレームワークにも対応しています。ctagsやetagsの作るタグファイルに対応する「Tags」も忘れがちなので助かりますね。


ちなみに、この.gitignoreの情報はGitHub公式の.gitignoreテンプレート収集リポジトリ https://github.com/github/gitignore から内容を取ってきています。このリポジトリが充実すればgiboが対応する環境も増えるというわけです。


そんなわけで、プロジェクト立ち上げ時はgiboで.gitignoreを作っちゃいましょう。

'); $entries_chunk.insertBefore(sections[0]); } else { chunk_id += 1; var $prev_entries_chunk = $entries_chunk; var $read_more_link = $('

これ以前の記事を表示する

'); $read_more_link.on('click', {chunk_id: chunk_id}, function(e){ $(e.target).hide(); $(this).remove(); $('#entries-chunk-' + e.data.chunk_id).fadeIn("slow"); }); $prev_entries_chunk.append($read_more_link); var $entries_chunk = $('
'); $entries_chunk.hide(); $entries_chunk.insertAfter($prev_entries_chunk); } } $(sections[i]).appendTo($entries_chunk); } });