誰が実際にGitリポジトリのコミッターであるかを確認する方法はありますか?CloudBeesには各開発者のキーがあるので、それが確実に1つになりますが、ある開発者が別の開発者の名前/メールアドレスをコミットフィールドに入力するのを妨げるものはありますか?それらを停止する方法ではない場合、少なくともGitログからコミッショナーのSSHキーを判別する方法はありますか?
2 に答える
いいえ、Git自体には、コミッショナーが実際にコミットオブジェクトに格納されていることを確認するための組み込みメカニズムがありません。このような制限があることには、実際には欠点があります。Gitは分散バージョン管理システムであるため、コミットはさまざまな場所に分散され、必ずしも中央の場所に収集されるとは限りません。すべての安定した(またはその他の)変更を収集するために使用される中央リポジトリがある場合でも、そのリポジトリを介する以外の方法で変更を転送することはまったく問題ありません。
たとえば、開発者AとBの両方が「中央」リポジトリから複製された場合でも、Aはたとえばいくつかの作業を行い、これらの変更を明示的にBに送信して、中央リポジトリを経由せずに確認することができます(たとえば、 Bのリポジトリにプッシュするか、BがAからプルします)。次に、Bがそれらの変更に基づいていくつかのコミットを行い、Aが最初に自分の変更をプッシュすることなく、中央リポジトリに公開したいとします。自分でコミットした変更のみを許可する制限が設定されている場合、Bはその状況でAの変更をプッシュできません。
このようなワークフローは実際の分散ワークフローでは非常に一般的であるため、通常、このような制限は適用されません。しかし、なぜそうするのかはまだわかります。おそらく、少数の新しい開発者か何かに制限されています。
実際、そのような制限を適用する方法はいくつかあります。Git自体はSSHキーに基づいて何もチェックできないことに注意してください。Gitにはシンプルなプロトコルがあり、すべての認証と承認がGitによって直接処理されることはありません(Gitはそのいずれもサポートしていません)。たとえば、リポジトリへのSSHアクセスは、オペレーティングシステムの標準SSHアクセスルールによって処理されます。httpsアクセスの場合、httpサーバーが認証を処理します。
Gitの一般的なアクセスレイヤーはGitoliteです。単一のユーザーを使用してSSH経由のアクセスを制御します。基本的に、SSHキーに基づいてユーザーのアクセスを非常に小さなGit固有のコマンドセットに制限します。コミットが常にプッシュユーザーと同じコミッターを持つ必要がある独自のプラグインを作成できます。または、同梱の電子メールアドレスを使用してすでに実装されている機能を使用することもできます。これについては、マニュアルの「作成者の電子メールの確認」のセクションを参照してください。
ところで。コミットのコミッターが実際にそれが言っているものであることを確認する通常の方法は、コミットに署名することです。他の誰かとしてコミットすることを妨げることはありませんが、コミッターの身元を確認することができます。
Gitoliteを使用して、リポジトリへのアクセスを制御できます。Gitoliteは、誰が個々のリポジトリまたはブランチにアクセスでき、誰がどのファイルを更新できるかについて、よりきめ細かい制御を追加するためのツールを提供します。また、どのユーザーがどの変更をプッシュしたかをログに記録することもできます。
SSH経由で通常のGitを使用すると、アクセスを制御するためにUnix権限のみを使用し、誰がどの特定のプッシュを行ったかをログに記録しないため、これを行うことはできません。また、コミットフィールドにリストされている人を偽造するのを防ぐことはできません。誰でも好きな値をそこに入れることができます。