自分で作った、バージョンのインクリメントからコミット、タグ付け、最後にpushする(こともできる)git-release.jsが使い勝手良いので愛用してる。ただ.gitディレクトリがあることを前提としているので、このままではsubmoduleのディレクトリではリリースできなかった。そこをちゃんとするようにしたり、iniパッケージを使うようにしたりした。
Download: git-release.js
git rev-parse --git-dirで普通のリポジトリでもsubmoduleでも適切なGitディレクトリのパスを返してくれる。submoduleの場合は親の.git/modules/submodule_nameになる。今までは2回Gitを呼ぶのが面倒だったので、git rev-parse --show-toplevelでリポジトリのルートを拾って、決め打ちで.git/configを加えて設定ファイルを探していたけどやめた。
submoduleのディレクトリには.gitディレクトリの代わり.gitファイルがあり、これに以下の様な形でGitディレクトリへの相対パスが記録されているので、これを見てもできそうに見える。
gitdir: ../../.git/modules/submodule_name
しかし.gitファイルがどのような構造でどのようなデータが記録されるかが明文化されていないので、これを見るのは良くなさそう。
git config --local --get-regexp release.*とかで拾った方が良いのかな。けどどっちにしろリポジトリのルートは必要だし、パースしやすさも考えるとINIファイルな$GIT_DIR/configを直接読んだ方が良さそうな気がする。