自分で作った、バージョンのインクリメントからコミット、タグ付け、最後に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を直接読んだ方が良さそうな気がする。