GitFlowを使用して別のブランチからのコードのマージを待機することにより、開発者がブロックされました


17

私たちのチームは、FogBugz&Kiln / MercurialからJira&Stash / Gitに切り替えました。ブランチにはGit Flowモデルを使用し、機能ブランチからサブタスクブランチを追加しています(Jira機能のJiraサブタスクに関連)。プルリクエストを作成して親ブランチにマージするときにStashを使用してレビュアーを割り当てます(通常は開発しますが、サブタスクは機能ブランチに戻ります)。

私たちが見つけている問題は、複数の開発者が同じ機能、たとえばフロントエンドとバックエンドで相互に依存しているコードで作業している場合、機能ケースの最適な計画と内訳でもです。別のブランチでは、1人の開発者が他の開発者をブロックします。

開発中に、お互いのブランチ間をプルしようとしました。また、各開発者が複数のブランチからプルして、開発時に統合をテストできるローカル統合ブランチを作成しようとしました。最後に、これはこれまでのところ私たちにとっておそらく最もうまく機能しているようですが、もう少しオーバーヘッドがありますが、機能ブランチからすぐに統合ブランチを作成しようとしました。サブタスクブランチ(機能ブランチ外)がプルリクエストとコードレビューの準備ができたら、これらの変更セットをこの機能統合ブランチに手動でマージします。その後、関心のあるすべての開発者は、その統合ブランチから他の依存サブタスクブランチにプルできます。これにより、コードレビューに合格するために依存しているブランチを誰も待つことができなくなります。

これは必ずしもGitの問題ではないことを知っています。これは、独自の作業プロセスと文化が混在する、複数のブランチで相互依存するコードを操作することに関係しています。開発(厳密な統合ブランチ)のための厳格なコードレビューポリシーがない場合、開発者1は、開発者2が引き出せるように開発にマージできます。もう1つの複雑な点は、QAに機能を渡す前に、コードレビュープロセスの一部としていくつかの予備テストを行う必要があることです。バックエンド開発者2が終了し、プルリクエストがコードレビューに1週間座っている場合、フロントエンド開発者2はコードレビューアができないため、技術的にプルリクエスト/コードレビューを作成できませんバックエンド開発者2 'のためのテスト

結論として、これらのインスタンスでは、どのルートに行くかに応じて、パラレルではなくはるかにシリアルなアプローチで自分自身を見つけており、これを回避するために使用するプロセスを見つけたいと考えています。

最後に言及することは、コードのレビューとファイナライズが完了していないブランチ間でコードを共有することで実現していますが、本質的には他のベータコードを使用しています。ある程度まではそれを避けることはできないと思いますし、ある程度それを受け入れるつもりです。


確認するだけです-機能へのタスクマージでコードレビューが行われていますか?開発する機能のマージに関するコードレビューはありませんか?

場合によります。コードを直接チェックするブランチに対応するJiraのケースはなく、階層的な意味で「傘」のケースとして機能しないJiraケースには2日以上かかるという経験則があります。そのため、機能のケースに2日未満かかる場合、機能を開発するためにコードレビューが行われます。サブタスクがある場合、それらがすべて機能チケットにマージされると、誰かがプルリクエストを見て、その機能ブランチを開発にマージしますが、すべてのサブタスクが既にそのプロセスを実行しているため、同じレベルのコードレビューではありません。
fogwolf

回答:


11

この問題は、バックエンド開発とフロントエンド開発のタスクの厳格な分離にある可能性もあります。

フロントエンド開発者が新しいAPIを必要とする場合、バックエンドでダミーAPIを作成して(たとえば常に同じ値を返す)、レイアウトを検証できるようにすることはできませんか?次に、その部分的な実装をスタブでコミットします。2回目は、バックエンド開発者が実際の機能を実装します。

依存関係を解消することで、より良いフローが得られ、ボトルネックとして機能する単一のタスクを待っているすべてを停止する必要がなくなります。


私はこれについて考えましたが、それは現在の開発プロセスの一部ではなく、余分なオーバーヘッドです。ただし、フロントエンド開発者がバックエンド開発者のコ​​ードにアクセスして開発中にテストできないという問題だけではないと思います。コードレビュー担当者がQAに送信する前に、統合全体(モックまたはスタブなし)のスモークテストを実行することについて詳しく説明します。
fogwolf

6
これは開発プロセスの一部ではありませんが、2人の開発者が3日間親指をいじって他の誰かがコードをコミットするのを待つよりも余分なオーバーヘッドがありますか?親指をいじる人ごとに8時間の無駄な開発者時間があります。それを、バックエンドの依存関係をスタブ化するのにかかる時間と比較してください。
グレッグブルクハート

5

問題:マスターからの開発者Aブランチ、マスターからの開発者Bブランチの両方は、密接に関連する機能で動作します。

これが予見できる場合、AとBは最初に共通のブランチを作成し、次にこの共通のブランチとは別の作業の各ブランチを作成し、それぞれの別々の作業を共通のブランチにマージします。統合が簡単。


0

開発者1が機能Aで作業し、開発者2が機能Aに依存する機能Bで作業を終了した場合、それを回避する方法はありません。機能Bのマージは保留中です。機能Aなしでテストすることはできません。また、機能Aのさらなる進歩が機能Bの変更につながる可能性があるため、まだレビューする意味はありません。

ただし、開発者2が保留になっているわけではありません!開発者2は、機能Cで作業を開始し、機能Aが完了すると機能Bのレビュー修正サイクルに戻ることができます。おそらくそれはない日に測定された私は、そのコンテキストの切り替えが最適ではないですけど、時間以来、それは完全な機能Aに連れて行くだろうという悪い(あなたが15分側タスクのための「ゾーン」のそれらを引き出していません)


もちろんですが、これは問題ではありません。単一の機能については、プロセスが必要以上にシリアル化されます。x日に機能をリリースする予定であり、チケットを並行してレビューできない場合、見積もりがオフになり、リリースがプッシュされる可能性があります。
fogwolf

0

この状況を解決するためにできることの1つは、開発サイクルを短縮する方法をよく検討することです。

開発者が別の開発者からの機能を待っている場合、最初の開発者の一部が機能全体に先立ってレビューと統合を経てブロックを解放できる方法はありますか?

機能をより小さな作業単位に分割して、統合サイクルを継続する方法はありますか?

また、統合にはどれくらい時間がかかりますか?ビルドまたは統合に長い時間がかかる場合、キュー全体が遅くなる可能性があります。キューがより速く解放されるように、ビルド時間を短縮するためにできることを確認してください。


これが私の主な希望です。この問題を解決できるとは思いませんが、新しいワークフローに慣れることで、問題を最小限に抑えるためにこの新しいシステム内で共同で作業を計画し、分解できるようになることを望んでいます。しかし、誰かが同様の何かに遭遇したかどうかを確認するだけで、プロセス的に賢明なものや、使用している分岐モデルに関連するものがありました。ありがとう。
fogwolf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.