GitのTagへ署名してみる
はじめに
今まで、ある程度まとまった機能が開発できたら、タグ付けするということを繰り返してきましたが、
今まで使用していたのは、軽量版のタグだということに気がつきちょっと調べて見ると、タグには注釈を付けることができ、さらにそれに対して署名が可能だということがわかりました。
これは、開発者であるコミッターとリリースタグを付けるリリースマネージャみたいな異なる人がいる場合に有効な仕組みだと思います。
作成した注釈+署名付きタグを、git showコマンドで確認すると、コミットの情報の上に、タグの情報と署名が表示されます。
{タグ作成者の情報} {注釈メッセージ} {署名} {コミットの情報}
環境
MacOSX v10.6
GnuPGやGitは導入済みとします。
前準備
Gitに署名用のGPG秘密鍵を登録します。$HOME/.gitconfigに直接記述することもできるのですが、コマンドで登録した方が、Syntaxエラー等を防げるのでコマンドで登録します。
$ git config --global user.signingkey 1234FEDC
署名付きのタグを作成
下記のコマンドで署名付きタグを作成できます。(既に作成済みのタグへ署名する場合は、-fオプションを追加します)
$ git tag -s v0.0.2 -m 'Interactive shell support' 次のユーザーの秘密鍵のロックを解除するには パスフレーズがいります:“Gonbe Nanashi (hoge) <hoge@gmail.com>” 2048ビットRSA鍵, ID 1234FEDC作成日付は2010-09-23 Updated tag 'v0.0.2' (was 4c5f5b8)
署名されたか確認します。
いつものgit showコマンドを実行すると、GPG署名が一緒に表示されます。
$ git show v0.0.2 tag v0.0.2 Tagger: Gonbe Nanashi <hoge@gmail.com> Date: Thu Sep 23 18:58:42 2010 +0900 Interactive shell support -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (Darwin) iQEcBAABCAAGBQJMmyTSAAoJEFWFhZJ7f/uc/AQIAJDjM/PiwixNgIrtFIuTglzM pG6YVFML5O63Rf1bmX8W9WAY7jWDufHZ5q+dY9PnzffM3Tz8HTiJMzKGjg66cZ89 vmuvaJ5nM/1hq1fbXdAjpXXxVPin/6jscpAjBefSQFckegXUCKe5Sl8K1M2c0ohY Qe7hViY9BlJXfn/xFgGBO9oWDcpz+hCcsb0SjyrsAirtPvX5axJEW/Eq3yKijXM4 QiR+q0B7/Sz9ymZJUB6wWEK/pdhf6w64pN+xEvaIHmrsqoPG3kXzhYOYCxQgeAms lEyd5caIKteKzQqAejtWW2y0Q4W7v+aeWr7lJfwMym+7f6iHwqsjVp87lzUaC+M= =QFab -----END PGP SIGNATURE----- commit e57c1135027592d6f25a444fe04b2aff8ebf0c39 Author: Gonbe Nanashi <hoge@gmail.com> Date: Thu Sep 23 17:13:19 2010 +0900 Add running interactive shell argument and parameters diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e92f57 --- /dev/null +++ b/.gitignore (...)
タグの検証
署名者の公開鍵を使用して、検証できます。
$ git tag -v v0.0.2 object e57c1135027592d6f25a444fe04b2aff8ebf0c39 type commit tag v0.0.2 tagger Gonbe Nanashi <hoge@gmail.com> 1285235922 +0900 Interactive shell support gpg: 木 9/23 18:58:42 2010 JSTにRSA鍵ID 1234FEDCで施された署名 gpg: “Gonbe Nanashi (hoge) <hoge@gmail.com>”からの正しい署名
参考
おまけ
タグをgithub等のリモートサーバへ送る
git push origin masterでやってるように、git push origin v0.0.2って実行してやるだけです。
$ git push origin v0.0.2
複数のタグを一度にpushしたい場合は、下記のコマンドを実行するといいらしいです。
$ git push origin --tags
リモートリポジトリからタグ一覧を取得する
まず、下記のコマンドで、自分のmasterブランチに最新リビジョンをマージします。
$ git pull origin master
タグはダウンロードされないので、下記のコマンドでタグを取得します。
$ git fetch origin --tags
最新のタグから、tarballを作成する
$ git describe v0.0.2 $ APP_VER=$(git describe) $ git archive --prefix=nanashi-${APP_VER#v}/ $APP_VER | gzip >nanashi-${APP_VER#v}.tar.gz $ tar tvf ~/src/nanashi-0.0.2.tar.gz -rw-rw-r-- 0 root root 5 9 23 23:41 nanashi-0.0.2/.gitignore -rw-rw-r-- 0 root root 0 9 23 23:41 nanashi-0.0.2/LICENSE -rw-rw-r-- 0 root root 27 9 23 23:41 nanashi-0.0.2/README -rwxrwxr-x 0 root root 4779 9 23 23:41 nanashi-0.0.2/nanashiCommand.py
ビルド用のディレクトリにtarballを送ってRPMを作成するとか、Webアプリだったら配信用ディレクトリに送ってrsync叩くとか。これで簡単にリリース管理ができますね。