分岐を1日で取り込むと、衝突は平均0.2個でした。14.8%の分岐でしか起きません。
30日持つと40.6個です。日数は30倍ですが、衝突は約200倍になりました。
衝突は日数に比例しません。自分の変更と他人の変更が両方増えるので、掛け算で効きます。
Gitの分岐を長く持つと衝突が増えます。どれだけ増えるのかを実際に数えました。
ファイル1200個・開発者8人という場を作りました。1人が1日に3個のファイルを触り、触る場所には偏りを持たせています。
分岐の寿命を変えて、取り込むときに同じファイルがぶつかる数を3000回まわして数えました。
ファイル 1200個・開発者 8人。1人が1日に 3個のファイルを触る 触るファイルは偏らせてある。上位10個で全体の10.9%を占める 分岐の寿命 自分が触ったファイル 他の人が触ったファイル 衝突した割合 平均の衝突数 1日 3.0個 20.5個 14.8% 0.2個 3日 8.9個 58.7個 71.3% 1.1個 7日 20.5個 127.2個 99.7% 4.6個 14日 40.0個 230.6個 100.0% 13.6個 30日 81.7個 415.9個 100.0% 40.6個
1日なら衝突は平均0.2個です。85.2%の分岐は、何もぶつからずに取り込めます。
30日持つと40.6個です。日数は30倍ですが、衝突は約200倍になりました。
理由は表の中ほどの2列にあります。自分が触った数も、他の人が触った数も、日数とともに増えます。
1日なら3.0個と20.5個です。30日では81.7個と415.9個になります。ぶつかる組み合わせは、その掛け算で増えます。
出典もこの向きを分岐は必然的に離れていくので、幹への反映が積み重なるほど、その分岐を幹へ取り込むのは難しくなると述べています。
日数が2倍になると、衝突はそれ以上に増える。
Branches inevitably diverge, so as more commits modify mainline, it gets harder to merge the release branch into mainline.原文Martin Fowler「Patterns for Managing Source Code Branches」 この内容の有効期限2027-02-18
衝突するかどうかは、寿命でほぼ決まります。数日を境に、例外だったものが常態になります。
Gitの分岐を取り込むとき、衝突するかどうかも寿命で決まります。表の右から2列目を見ます。
1日なら14.8%です。7回に1回だけぶつかる、という水準です。
3日で71.3%、7日で99.7%になります。1週間持てば、ほぼ確実にぶつかります。
たまに起きるうちは、起きたときだけ対処すれば済みます。毎回起きるようになると、作業の一部になります。
しかも衝突の数は同時に増えています。7日で4.6個、14日で13.6個です。1回の対処にかかる時間も伸びます。
出典も小さく取り込む理由を取り込みが小さければ作業も少なくなる。衝突を抱えうるコードの変更が少ないからだとしています。
3番目が要点です。機能の完成と、取り込みの頻度を切り離せます。完成まで待つ必要はありません。
4番目はこの計測にも表れています。触る場所を偏らせたので、上位10個のファイルだけで全体の10.9%が集中しています。
Smaller integrations mean less work, since there's less code changes that might hold up conflicts.原文Martin Fowler「Patterns for Managing Source Code Branches」 この内容の有効期限2027-02-18
分岐を切る操作そのものは軽い作業です。重いのは、分かれていた期間の差を埋める側です。
Gitで分岐を切るのは一瞬です。費用がかかるのは、取り込むときです。
だから「分岐を作るかどうか」ではなく、どれだけの期間、分かれたままにするかが問題になります。
出典もこの点をどれくらいの頻度で取り込みを行うかは、チームの動き方に驚くほど強い影響を与えると述べています。
この計測でも、分岐を切る操作そのものは1行も数えていません。数えたのは、分かれていたあいだに触られたファイルだけです。
1日なら自分3.0個・他の人20.5個、30日なら81.7個と415.9個です。期間がそのまま量になります。
この計測では、同じファイルを触ったら衝突として数えました。実際にはもっと静かなずれもあります。
1番目と2番目は、機械には見えません。取り込めてしまうので、動かして初めて分かります。
この種のずれも、分かれていた期間に比例して増えます。衝突の数は、見えているぶんだけです。
取り込んだあとに動かして確かめる仕組みはCI/CDの記事で扱っています。
重いのは分岐を切ることではなく、分かれていた期間。
触るファイルの偏りは式で作った分布です。実際には担当や機能でさらに偏るので、同じ人が同じ場所を触り続ける場合は衝突が減ります。逆に共通の設定ファイルがあると、ここより増えます。衝突の判定も「同じファイルを触ったか」という粗い形です。ここで見せているのは、自分と他人の変更が両方増えるため、衝突が日数以上の速さで増えるという関係です。
How often we do integration has a remarkably powerful effect on how a team operates.原文Martin Fowler「Patterns for Managing Source Code Branches」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る