ブランチをマスターなしでマスターにマージするのではなく、プルリクエストを使用する利点は何ですか?特に、すべての開発者がマスターに完全にアクセスできるチームで。
プルリクエストは、誰でもマスターにプッシュできる場合でも、チェックとバランスを提供します。
最大の利点は、コードレビューの機会を提供することです。プルの実行を担当する担当者は、コードとテストを見て、組織またはチームが持っているあらゆる種類のガイドラインを満たしていることを確認できます。 コードレビューの他の理由 -教育、欠陥や機能強化の発見、システムに関するチームのクロストレーニング、テスターにシステムのホワイトボックスビューを提供します。
プルを実行する人がシステムのアーキテクチャに精通している場合、特にチーム全体が長期的なビジョンを持っていない可能性がある場合は、変更がシステムのアーキテクチャのビジョンに適合していることを確認できます。
チーム全体がマスターにアクセスできないようにする必要があると将来的に判断した場合、プルリクエストを使用する習慣を身に付けることも、チームに役立つ場合があります。チームが大きくなる場合、特に、製品に不慣れなチームメンバーやGitに不慣れなチームメンバーがいる場合は、マスターへのアクセスを許可しない方が製品の整合性を確保するのに安全です。
機能の分岐とフォーク+プルリクエストの両方を行った後、同じチームまたは会社で全員が開発している場合、プルリクエストはほとんどメリットがないと思います
それらはコードレビューのための優れたメカニズムとインターフェースを提供しますが、「ものを完成させる」プロセス全体を複雑にし、速度を落とします。特に、多くの小さな機能があり、それぞれがレビューを待ってマージしてから、他のすべての機能がマスターと再びマージされて変更をプルする場合などです。大きな機能があると、レビューが難しくなり、バインドに巻き込まれます。 。
同じリポジトリのブランチ間でプルリクエストを行うことができると述べました。フォークしたり、別の権限を持っている必要はありません。
さらに、方法論とワークフロー全体を考慮する必要があります。発券システム、CI、自動受け入れテストなどもありますか?コードレビューは、コードが公開される前に重要な単一のチェックを提供しますか、それともワークフローの他のチェックによって冗長化された単なるゴム印の演習ですか?
コンウェイの法則と呼ばれる所見があります。
システムを設計する組織...これらの組織のコミュニケーション構造のコピーである設計を生成するように制限されています。
これはプルリクエストとどう関係していますか?プルリクエストは、コードの重要な接点での主要な通信チャネルです。これらは、コードがテストと本番の次の段階に進む前に、レビュー、自動テスト、および改善の機会を提供します。これらの変更は、バックアウトがはるかに困難であり、より多くの人々の多くの時間を浪費します。
同様に、コンウェイの法則は、自律的責任の明確に分離された領域と明確に定義されたインターフェイスを備えたマイクロサービスアーキテクチャが必要な場合、組織の通信チャネルが達成したいアーキテクチャを反映していることを示唆しています。つまり、5〜10人の小さなチームは、任意のマイクロサービスに直接コミットアクセスできる必要があり、そのチーム外の誰もがプルリクエストを通過する必要があります。これにより、マイクロサービスに最も精通している人々がそれについてレビューし、アドバイスすることが確実になります。
誰もがどこからでも直接コミットできる大規模な組織の場合、抵抗が最も少ない通信チャネルによって、泥のアーキテクチャの大きなボールを作成する準備が整います。
プルリクエストは、見返りに何もトレードオフしない場合にのみ負担のように感じられます。ビルドは常に壊れているため、1週間何もできない環境で作業しました。また、誰かがプルリクエストを送信し、壊れたために確認する必要がない環境で作業しました。 CIビルドと私はあなたに言います、それらは努力の毎秒の価値があります。
カールビーレフェルトはまさにその通りです。私は付け加えます:それはすべて品質に関するものです。
多くの(ほとんど?)ショップには、開発を管理する正式なプロセスがないため、「ビルドは常に壊れているため、1週間何もできない環境で作業してきました。誰かがプルリクエストを送信し、CIビルドを壊したのでそれを確認する必要さえない環境では、私はあなたが言うには、彼らは毎秒の努力の価値があります。」
本当にIS努力する価値があります。
コードレビューにはプルリクエストを使用します。プルリクエストを経由せずに、コードをメインの開発ブランチ(通常は「開発」、場合によっては「マスター」)にマージしないでください。リポジトリ制御でこれを強制することはありませんが、それは私たちがする必要がないためです-私たちの開発者はプロセスを乱用しないように十分に成熟しています。