2017-05-11 15 views
0

デフォルトでGitにプル・エンベロープを強制する方法があるかどうかは疑問でした.Gitではこれを行う必要がありますプリプルフックとコマンドで作成します。私が言いたいのGit - Enforcing Pull Embargos

クイック例:

- ユーザAが原因の発展に自分のコンピュータ上で動作の変更をプッシュします。

-User B/Serverは、最近のプルが彼のために崩壊し、禁輸を呼び出したことに気づいています。

-user & B問題を処理し始めます。

-その間に、ユーザーCは最近の変更を取得したいと考えています。禁輸措置は、彼のためのビルドを破り、彼が働くのを止めるのを避けるために、彼がそうするのを止めるべきです。

答えて

1

私は直接の答えに入る前に、私はいくつかのことを指摘します:

まず、悪いプルは作業から開発を中止することを前提はfalseです。最悪の場合、開発者は前の状態をチェックアウトすることができます。頭が孤立した状態にしたくない場合は、resetを使って自分のrefsを以前の状態に戻して、あなたの "禁輸"の考えよりも悪化しないようにすることさえできます。たいていは不便であるはずです。

第2に、これは今まで覚えていることではありません。頻繁にそれを実行している場合は、分岐、テスト、およびマージに関するポリシーを改善して、共有ブランチが壊れた状態になることはまれなケースにすることをお勧めします。

たとえば、フィーチャブランチで開発が行われた場合、フィーチャは共有ブランチをフィーチャにマージし、結果をテスト環境にロードすることによってテストされます。共有ブランチ...あなたが描いたシナリオが起こる可能性はほとんどありません。

この問題はまれにしか発生しませんが、開発者を制限する手続きを作成するだけで、進歩の方法を決定するのに必要な情報を提供するだけでは足りません。

しかし、おそらくあなたはそれほど説得力のないものを見つけるでしょう。だから...

これにはデフォルトの機能はありません。

フックを使用できます。しかし、あなたはどんなフックを使いますか?それは何をしますか?あなたが実際にを避けたい場合は、をプルしないようにするには、フェッチを実際に防止するためにサーバー側のフックが必要です(クローンレポにオブジェクトが含まれていれば、取り込みを防ぐなら、誰も引き抜くことはできません何か。私はとにかくそれをする方法がないことを知っています。

(ポリシーを強制するのではなく)開発者の便宜のためにこれを認識すれば、代わりにクライアント側のフックの組み合わせを設定しようとすることもできますが、あなたのやりたいことをするためにそれらをまとめる方法。 (さらに、クライアント側のフックはいくつかの中央リストを参照する必要があります。そうしないと、「禁輸」を課すか持ち上げるたびに更新する必要があります。せいぜいこれはオフライン操作のためのgitの利点を削減し、ルーチン操作であるべきものに挿入するだけの複雑さのように思えます。

最も近いことは、問題を見つけたときに、悪いコミットの前にリモートのブランチrefをリセットすることです。しかし、これは発行されたコミットの再構築に効果的であり、最初に防止しようとしているように多くの(またはそれ以上の)不都合が発生する可能性があります。

私のアドバイスは同じポイントに戻ってくるので、これは良い考えではありません。あなたのチームとコミュニケーションをとって、「今、このブランチを引っ張ってビルドを壊す」と警告するのが良い考えです。

+0

ご回答いただきありがとうございます。私はこれを「紳士協定」から強制的に守っていきたいと考えていましたが、あなたの反応を見て、特定の事柄にコミットして最もコスト効率の高いものを見る前に、他の方法を検討します。 – Volvary