Git Flowのようなマージ戦略は本当にアンチパターンですか?


30

私の会社はGitを使用しており、独特の分岐スキームを使用しています-作業はマスターで行われ、分岐はリリース用に予約されています。これは、反復で行われたすべての作業がブランチに行われる限り正常に機能しますが、重大な生産上の問題が発生した場合、作業が何らかの方法で両方のブランチに行われるようにする必要があります。

最近、私たちはそれらのブランチで「楽しい」ことをしてきました。これは管理上の頭痛の種であり、すべての作業がすべてのブランチに反映され、1つのブランチで修正された一部のバグは、誰かが指摘するまでマスターになりません。

しばらく前にGit Flowに出会いましたが、それが私たちの問題の解決策だと感じています-コードがリリースまで浸透していないか、ずっと下に浸透していません。唯一の問題は、私のリードがこの種の開発はアンチパターンであると述べていることです。つまり、2週間にわたって猛烈に開発し、マージの競合を解決するために3を費やしました。

同意するかどうかは定かではありませんが、それを育ててから、仕事は通常のように再開しました。ごく最近になって、これに関していくつかの大きな問題がありました。

私は知りたい-なぜこの種の開発スキームはアンチパターンと見なされるのですか? 、それは本当にアンチパターン?


1
Ted Dziubaの古いブログ投稿の「Rule 3」セクションは、それがアンチパターンになる方法を説明するのに役立つかもしれません。
-Isxek

5
IMO、バージョン管理について考えることに実際の時間を費やすほど、そもそもユーザー全体->ツール現象に問題が生じています。
エリックReppen

@ErikReppen:みんなの心をバージョン管理から遠ざけて、誰もが慣れるプロセスを作りたいです。このように、これがアンチパターンであるかどうかなどを心配する必要はありません。

6
@Makoto KISSに違反するものはすべて、アンチパターン、IMOです。これは、VCSパワーユーザーが私を夢中にさせる傾向がある場所です。
エリックReppen

6
「アンチパターン」という用語は、「ベストプラクティス」のようなもので、多くの場合、人々が脳をオフにする言い訳として機能します。リードが彼がどのような経験を持ち、なぜそれが悪いのかを明確に伝えることができない場合、この概念を受け入れないでください。
キラレッサ

回答:


30

彼は主にモデルの機能ブランチ側について言及しています。機能ブランチは、かなり前にブランチが数か月間続き、バージョン管理システムをマージして命を救うことができなかったときにアンチパターンとして宣言されました。週または2最後の特徴の枝は、あなたが継続的にマージしている場合は特に、非常に少数の問題を抱えているから、 developその時間中に機能ブランチに。それよりはるかに長いものはまだお勧めできません。

gitフローの機能ブランチ側を使用しない場合でも、他の部分はクリーンなマージを取得し、変更が正しい方向に反映されるようにするのに役立ちます。


3
機能ブランチでの私の経験、または機能ブランチを行った方法では、反復よりも長く生きることが許可されている場合、それらに心痛が生じることがあります。リリース前にすべての機能をイテレーションにマージする必要があることを示すルールは、マージの心痛を軽減するために素晴らしいことです-そして、少年、それらの背後にある深刻な心痛があり
Makoto

6
私の経験では、最近のマスターとマージしたり、必要に応じて開発したりする限り、ローカルのものを置いておくことができます。
Jan Hudec

2
@JaHudec ...または、何らかの矛盾がある2つのものが横たわるまで。あなたは常にそれが行われていることについての概要を持っている必要があります
...-johannes

5
それについて少し読んで、Martin Fowlerのリファレンスは、継続的な統合フローで行われた機能分岐がうまくいくことを示しているようです-ほとんどの人がそれらを行うことを検討するよりも小さなバイトで行われた場合。ですから、ある意味であなたは正しいです-機能ブランチでの存続可能時間は2週間未満が適切と思われます。ただし、機能ブランチ自体がアンチパターンである方法はわかりません。

3
あなたが正しい。それらは、マージされずに長すぎる場合にのみアンチパターンになります。根底にある理由を覚えていない場合でも、アイデアに反することがあります。
カールビーレフェルト

21

マージはおもしろいことです-実行頻度が低いほど難しくなり、難しくなるほど、それを恐れる人が多くなり、実行頻度が低くなります。

解決策は、ブランチの逸脱を許可しないか、ブランチを使用しないことです。

人々がこれを理解していれば、おそらくマージにそれほど問題はないでしょう。そうでない場合、ブランチは教育なしでは良いアイデアではないかもしれません。


1
いや、ブランチを使用しないことは、スターターではありません。もう1つの主要な問題は、同じコード内の2つの異なる場所で作業を実行できることです。したがって、それを緩和するために何かを行うことができれば幸いです。

12
@makoto、非常に頻繁にコード内の事柄を分離することで、競合の頻度が少なくなります。機能を機能/クラスに単純に分離するか、モジュール間の文書化されていない仮定をより高度に回避することができます。その後、変更はよりローカライズされます。
maxim1000

1
@ maxim1000同意します。私は、誰かがかつてのようなもの「A VCSは、モジュラー[デカップリング]アーキテクチャに貧乏人の選択肢である」と述べたと思う
8DH

最初の段落の+1。そして、はい、教育なしではgitflowのようなものは行き止まりです
-daitangio
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.