web-dev-qa-db-ja.com

Gitでコミットとタグに暗号で署名することの利点と欠点は何ですか?

そのため、誰かが私の仕事をレビューし、彼は私が常にコミットとタグに暗号で署名する必要があると私に言った。理由を尋ねられたとき、彼は私にそれを説明することを知らなかった、そして「それをするのはただ良いことだ」と言いました。

明白な チンパンジーシナリオ を避けようとするのに、なぜ私は本当にそうすべきなのでしょうか?本当に多くの明確な利点があり、欠点はありませんか?

すべてのコミットとタグに署名したいという実際的な理由は何ですか?

120
Madara's Ghost

(これは主に A Git Horror Story:Repository Integrity With Signed Commits —に基づいており、非常に優れた読み物であり、回答に含めることができるよりも多くの情報です。)

Gitリポジトリが危険にさらされる可能性のある方法はいくつかあります(これはセキュリティ上の欠陥ではなく、単なる事実です。これが原因でgitの使用を避けるべきではありません)。たとえば、あなたを名乗る誰かがあなたのリポジトリにプッシュした可能性があります。または、そのことについて、誰かがあなたと主張している誰かelse'sリポジトリにプッシュした可能性があります(誰かがあなたであると主張して自分のリポジトリにプッシュすることもできます)。これはDVCSの一部にすぎません。

例として:

$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email [email protected]

そこで、私はあなたのふりをするようにgit設定を変更しました。そして今、私は離れてコミットし、それらのコミットを何とかして本番ビルドに移行させることができます。あなたはそれを行ったようです。

コミット(およびタグ)に署名することで、特定のコミットおよびタグがあなたからのものであることを証明できます(署名されていないものは、本番ビルドに組み込まれるべきではありません)。それが本当にすべての鍵です。コミットに署名することで、あなたは自分の仕事だと言いました。

「あなたの仕事」の側面は、著作権訴訟に見舞われることがあるLinuxカーネル(したがってgit)で特に重要です。コミットに署名することで、ソフトウェアに対する権利を持っていると言います—ソフトウェアはOriginを追跡します。著作権として主張されている情報源にアクセスできず、主張が根拠がない可能性があります。会社があなたが数年前に彼らのために働いていたことを忘れていて、彼らの指示の下でカーネルに材料を追加したなどのことかもしれません。

すべてのコミットに署名する必要があるかどうかについては、いくつかの議論があります。 git commitのGPG署名? ('09に戻って)から、Linusは次のように書いています:

各コミットへの署名は完全に愚かです。それはあなたがそれを自動化し、署名の価値を低くすることを意味するだけです。また、SHA1のgit DAGチェーンが機能するため、1つの署名だけで、そのコミットから到達可能なすべてのコミットを効果的にカバーできます。したがって、各コミットに署名することは、要点を失っているだけです。

Gitへのサインインに関する考えについての詳細は、そこでも読むことができます。

とにかく、それはとにかくGitに入りました。

コミットへの署名は不要であるという大多数のコンセンサスがあるようですが、タグへの署名は非常に良いです。上部にリンクされたブログ投稿は、とにかくすべてに署名する必要があることを示唆しています。私が言ったように、すべてのコミットが必要かどうかについてはいくつかの議論があります。

「すべてのコミットに署名する」議論の鍵はおそらく、使用するワークフローに関係しています。ほとんどの人は、ローカルリポジトリで大量のコミットを作成してから、そのセットをプッシュします。最終的なコレクションにタグを付けるだけで十分です(つまり、すべての変更が正しいことを確認するとします)。多くの単一のコミットが移動している環境で作業している場合、タグとコミットの区別が少なくなり、明確になります。コミットへの署名がより便利になる場合があります。

111
user40980