2

Subversion から git への移行を検討しています。まず、svn と同様に、中央リポジトリ スキームが使用されます。

問題は、各コミットが実在の人物によって作成されたことを確認したいということです。

Subversion では、svn パスワードをキャッシュしないと仮定すると、コミットの作成者が実際の作成者であることを確認できます。

ネットで数え切れないほどの検索を行った結果、中央リポジトリをプッシュするたびに署名付きタグを作成する必要があることがわかりました。タグに署名するには、以前のコミットを確認して、コンピューターから離れている間に誰も何も変更していないことを確認する必要があります (たとえば、悪意のあるコードを導入して後で削除すると、全体的な差分では見えなくなりますが、継続的なビルド/テスト サーバーでまだ実行されています)。

これは、コミットを再確認する必要があることを意味します。最初に各コミットを作成するとき、次に署名付きタグでプッシュすることに決めたときにもう一度確認します。しかし、それは時間がかかり、冗長です。署名されたタグが進むべき道である場合、commit ごとに署名されたタグを作成する必要があると思います。これにより、リポジトリ全体がタグで埋められます。私の意見では、それはまったく正しく聞こえません。

私が考えることができる最もクリーンな解決策は、各コミットに署名することです(git 1.7.9以降でサポートされています)。しかし、どういうわけか私はそれを理解していません。git でサポートされていますが、まだ馬鹿げていると思われます。

私はどうしたらいいですか?すべてのコミットをダブルチェックし、プッシュごとのタグ署名を行うのに時間を浪費します。または、コミットごとにタグ署名します。またはすべてのコミットに署名しますか?私が知らない代替手段はありますか?

前もって感謝します。

4

2 に答える 2

2

あなたはこの考え全体に本当にやり過ぎだと思いますが、本当に主張するなら、ここに解決策があります.

Gerrit Code Reviewを中央の git サーバーとしてインストールします。信頼できない人 (チーム全体である可能性があり、自分自身を含む可能性もあります) からの直接のプッシュを禁止するように構成します。

今、誰もが最初にコードレビューに提出することを余儀なくされます. 信頼できる人だけが変更を承認するようにします (繰り返しますが、これはあなただけかもしれません)。これらの承認は Gerrit サーバーによってログに記録され、Gerrit のみがブランチを前方に移動できます。

この時点から、信頼できる唯一の git リポジトリは、Gerrit サーバー、または関心のあるすべてのブランチに対してまったく同じ sha を持つ他の git リポジトリです。

QED

于 2013-01-12T09:59:26.967 に答える
1

Subversion でのパスワード認証を信頼する場合、git でのパスワード認証も信頼できます。

ネットで読んでいる記事は、リポジトリをホストしているサーバーを信頼していなくても、署名されたタグを使用してコミット間に信頼のチェーンを確立する場合、おそらくオープン ソースのケースに当てはまります。Subversion の場合、svn サーバーを信頼しない可能性はないので、信頼できるマシンがあると想定しています。その場合、svn の場合と同じことが当てはまります: マシンへのパスワードを安全に保管してください。Git 自体がパスワードをキャッシュすることはありませんが、ssh 公開鍵を使用すると、毎回パスワードを入力しなくてもサーバーへのアクセスを効果的に許可できます。

編集:あなたもあなたのチームを信頼できると思っていました。誰かの名前でコミットを行うことは実際に可能です。しかし、チームが自分の名前を使用することを信頼できない場合、これらの人々からの実際のコードを信頼できるかどうかなど、より大きな問題も発生します。

于 2013-01-11T11:54:50.203 に答える