小ネタです。すいません。
自動コミットとそのきっかけ
ある日、突然「手動コミットが許されるのは小学生までだよねーキャハハ」というツイートが僕の TL に流れ込んできて、いろいろな方にお話を聞いたところ結構な人がコミットは自動化しているということだったので僕もやってみようと思いました。
当時のツイートはこんな感じ。
https://twitter.com/a_suenami/status/537513929849569280
https://twitter.com/a_suenami/status/537514152512589824
やってみた
Guard でやってみました。
# Gemfile
source "https://rubygems.org"
gem "guard-shell"
# Guardfile
guard :shell do
watch /\A**\/*\z/ do |m|
`git add #{m[0]} && git commit -m 'Automatically commit: #{m[0]}'`
end
end
これだけです。
あとは Guard を起動します。
$ bundle exec guard
Guard を起動した状態で、例えば
$ echo 'Hello, world!' > hello.txt
とするとhello.txt
が自動的にコミットされます。
$ git log --oneline -1
dc004a4 Automatically commit: hello.txt
あとは煮るなり焼くなり
Git はコミットさえしえておけば基本的にその履歴が消えることはほとんどありません。GC はされますがそれまでは基本的に各ブランチの HEAD から到達不可能になることがあるだけでコミット自体は残りますし、そのようなコミットも reflog からは参照できます。
共有リポジトリに push するコミットは意味的にまとまった単位になっているほうがよいですが、push する前の作業履歴として自動コミットはよいプラクティスなのではないでしょうか。あとは rebase して squash するなり、別ブランチを作って cherry-pick するなり、自由にいろいろすればよいのかと。