だから誰かが私の仕事をレビューし、彼は私にいつも私のコミットとタグに暗号で署名するべきだと言った。理由を尋ねられたとき、彼はそれを私に説明することを知らず、「やるのは良いことだ」と言った。
明らかなチンパンジーのシナリオを回避しようとすると、なぜ本当に必要なのでしょうか?本当に多くの明確な利点があり、欠点はありませんか?
私が作成するすべてのコミットとタグに署名したいと思う実用的な理由は何ですか?
だから誰かが私の仕事をレビューし、彼は私にいつも私のコミットとタグに暗号で署名するべきだと言った。理由を尋ねられたとき、彼はそれを私に説明することを知らず、「やるのは良いことだ」と言った。
明らかなチンパンジーのシナリオを回避しようとすると、なぜ本当に必要なのでしょうか?本当に多くの明確な利点があり、欠点はありませんか?
私が作成するすべてのコミットとタグに署名したいと思う実用的な理由は何ですか?
回答:
(これは主に、Git Horror Story:署名済みコミットによるリポジトリの整合性に基づいています。非常に読みやすく、答えに入れることができる以上の情報です。)
gitリポジトリが危険にさらされる方法はいくつかあります(これはセキュリティ上の欠陥ではなく、単なる現実です。このため、gitの使用を避けるべきではありません)。たとえば、誰かがあなたであると主張してあなたのリポジトリにプッシュしたかもしれません。または、そのことについて、誰かがあなたであると主張する他の誰かのリポジトリにプッシュすることもできます(誰かがあなたであると主張する自分のリポジトリにプッシュすることもできます)。これはDVCSの人生の一部にすぎません。
例として:
$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com
そこで、私はあなたのふりをするためにgit設定を変更しました。そして今、私は離れてコミットし、それらのコミットを何らかの形で本番ビルドに入れることができます。あなたはそれをやったようです。
コミット(およびタグ)に署名することで、特定のコミットおよびタグがあなたからのものであることを証明できます(そして、署名されていないものは本番ビルドに入れてはいけません)。それが本当にすべての鍵です。コミットに署名することで、それがあなたの仕事だと言いました。
「あなたの仕事」の側面は、著作権訴訟で時折ヒットするLinuxカーネル(およびgit)で特に重要です。コミットに署名することで、あなたはソフトウェアに対する権利を持っていると言います—それは起源を追跡します。著作権として主張されているソースにアクセスできず、主張が根拠のないものである可能性があります。それは会社があなたが数年前に彼らのために働いていたことを忘れている可能性があり、その指示の下、カーネル、または任意に材料を追加しました。
すべてのコミットに署名する必要があるかどうかについては、いくつかの議論があります。git commitのGPG署名から?(2009年に戻る)、Linusは次のように書いています。
各コミットに署名することはまったくばかげています。それはあなたがそれを自動化することを意味し、あなたは署名の価値を減らします。また、SHA1のgit DAGチェーンの動作方法から、実際の価値が追加されることはありません。その1つの署名があれば、その1つからすべてのコミットを効果的にカバーできます。したがって、各コミットに署名するだけでは、ポイントが失われます。
gitでの署名に関する考え方については、こちらでも読むことができます。
とはいえ、とにかくgitに移行しました。
コミットへの署名は不要であるという大多数のコンセンサスがあるようですが、タグへの署名は非常に優れています。上部にリンクされているそのブログ投稿は、とにかくすべてに署名する必要があることを示唆しています。私が言ったように、すべてのコミットが必要かどうかについていくつかの議論があります。
「すべてのコミットに署名する」議論の鍵は、おそらくあなたが使用するワークフローに関係しています。ほとんどの人はローカルリポジトリで大量のコミットを行い、そのセットをプッシュします。最終コレクションにタグを付けるだけで十分です(つまり、すべての変更が正しいことを確認します)。多数の単一コミットが動き回る環境で作業している場合、タグとコミットの区別はより少なくなり、明確になり、コミットの署名がより便利になる場合があります。
commit.gpgsign = true
欠点はありません。馬鹿げているかもしれませんが、それほど高価ではないようです。