分散型のサバクラ?エージェント式?のツールを作ってると、各クライアントのバージョンを集中して確認したくなることがあると思う。
たとえばこういうものとか → HighBatch(宣伝)
Webでちょっと探した感じだとビルド時にGitから取得するのが一般的な感じ1だけど、それってGitが入ってない環境でZipとかでダウンロードした時ってどうなるの?って考えたら夜も眠れなくなりそうなのでコミット時にバージョンをつける方法を考えてみた。
cat .git/hooks/pre-commit
#!/bin/sh
a=(`git describe | tr -s '-' ' '`)
echo "package hogehoge" > hogehoge/version.go
echo "const Version = \"${a[0]}-${a[1]}\"" >> hogehoge/version.go
要は git describe
を使ってプレコミットフックのタイミングでバージョン用のソースを自動で作ってるだけなんだけど、一応レビジョン番号はカットしている。
Gitのインストール元にもよるんだろうけど、一応WindowsのHookでも動作確認済み。
でも、複数人でコミットする場合はどうするの?とかHookの共有はどうするの?とか、どの環境でもうまくいく方法ではないのがイマイチな感じ。
複数人でコミットしあうときには ver.0.9-23-nobu
とかってもう少し情報を与えないとダメだったりするので、うまくまわるのは一人で開発してる時だけかもしれませんね...
でも、ビルド痔に付加させるのもビルドするコマンドを矯正できるかどうかってのも疑問なんでそっちよりはいい感じがするかな?どっちがいいんだろう?
個人的には、ソースに埋め込む方法だとレビジョンをカットしても検索で引っかけることができるという副次的なメリットもあって良さそうだけど。
なるべく複雑なことはしたくないし。