複数のブランチを持つ git を使用している場合は、それらが死んでいても便利です。どの製品バージョンでバグが導入されたかを追跡でき (バージョンごとに二分)、多くの小さなチームの作業を整理できます。枯れた枝を見るだけで、一部のアイデアがうまくいかなかった理由がわかります。
重要なのは一貫性です。ワークフローに合わせてブランチをグループ化してみてください。たとえば、
stable
- CI は、これから本番環境および/またはステージングを構築します
staging
- これから CI ビルド ステージング
feature/*
- 機能のブランチ
hotfix/*
- ステージング/安定ブランチから開始、ホットフィックスに使用
experimental/*
- クリーンで保守可能なコードにならない可能性がある、または途中で放棄される可能性がある R&D 機能に使用される
ここでいくつかの基本的なヒント:
http://nvie.com/posts/a-successful-git-branching-model/
また、チームが適切なブランチ構造をすぐに使い始められるようにしたい場合は、git フローを試してください: http://jeffkreftmeijer.com/2010/why-arent-you-using-git-flow/
他の同僚の悪いコードのリファクタリングについて。いくつかのrefactor/*
ブランチを使用できるので、別のブランチでアトミックなマージ/リベースを行うことで何が壊れているかを簡単に確認できます。もちろん、テストを行うことは非常に便利ですが、シンプルgit bisect
にしないと、誰がいつバグを導入したかがわかります (そして、バイセクトが使用するこのバグをチェックするテストを作成すると、追加する意味のあるテストが得られます)。あなたのテストスイート)。
肝心なのは、多くのブランチを持つことを恐れずに、それらを整理しておくことです。ほとんどの場合、マージは人々が言うほど複雑ではなく、いつでも元に戻すことができます (または、継続的デリバリー モデルを使用していない場合は、次のリリースまで延期します)。
編集:つまりsomething/*
、共通のプレフィックスを持つ複数のブランチがあるsomething/
ため、ディレクトリ構造を模倣しています。
EDIT2: 分岐とマージがそれほど安くない SVN ライクでは状況が異なります。注意して進んでください;)
EDIT3: モジュールごとに異なる (サブ) リポジトリを使用することを検討してください。開発を簡素化する可能性があります。モジュール開発者は、メイン アプリケーションの最新の安定バージョンのみに関心があり、ブランチ モデルは 1 つのモジュールのみを対象としています。
EDIT4: Q: 「ごちゃごちゃした分岐が許容されるしきい値と、それを超えると分岐を編成するほうがよいしきい値に、いくつかの数値または数式を配置することを検討できますか?」
もちろん!
式 (私の謙虚な意見では) は単純です。
- 必要な数の「ダーティ」ブランチをローカルに持つ (他の人や共有リポジトリにプッシュしないでください)
- 他の開発者にとって何らかの価値がない限り、ダーティ ブランチをプッシュしないようにしてください。それらがすでに共有リポジトリにある場合は、それらを保持して名前を変更します(
legacy/*
またはプレーンdirty/*
が思い浮かびます)。
それらをファイル構造と考えてください。多くのレガシー ファイルが不要になる可能性がありますが、それらを整理して保管しておくと、アーカイブを作業セットから簡単に分離できます。
数字が好きなので、それらのブランチの実際のユースケースが必要になるでしょう
私が取り組んできた小規模から中規模の Symfony2 PHP プロジェクトの例を挙げましょう。
2 週間ごとにクライアント デモを行い、アジャイル (スクラム) 方式で 5 人の開発者によって積極的に開発されたプロジェクトが 6 ~ 9 か月進行している場合、ブランチが必要になる場合があります。
- ユーザー ストーリーごとに (緊密に統合されたユーザー ストーリーでは、これは悪い考えかもしれません)、合計約 50 のブランチ。それらを機能ブランチと考えてください。
- 開発者ごとに (開発者がしばらく何かに取り組む必要がある場合はオンデマンドで)、彼らは行き来しますが、通常、この種のプロジェクトでは開発者は 3 人未満です。それらの一部は、公開開発者ブランチをまったく使用せず、ダーティ ブランチを独自に保持しています。
- 実験的(モジュールで使用されるさまざまなアルゴリズムやライブラリなど、研究目的の無制限の数のブランチ)、覚えている限り約7つのブランチ
- スプリントごと (ユーザー ストーリーからマージされ、デモに役立ちます)、約 10 で、初期開発中のステージング/安定版です。なぜタグ付けしないのですか?タグも同様ですが、修正プログラムを適用しやすいため分岐します。
- 修正プログラム (通常は短命で、チェリー ピッキングを簡単にするために分離されています)、3 つのトップ ;)
- その他 (通常、進行中のシステム全体の機能および/または 2 ~ 3 人のチーム ブランチ)、約 10
ご覧のとおり、ここにも正確な数はありません。私はこの規模のプロジェクトをいくつか行ってきましたが、それらのほとんどには約 70 ~ 80 のブランチがありました (ユーザー ストーリーのブランチがない場合は 20 ~ 30)。それらが論理的でクリーンな方法で編成されている場合、コード リポジトリは簡単に参照できます。
git では、マージの代わりにリベースも検討して、マージ バブルが発生しないようにします (この記事http://stevenharman.net/git-pull-with-automatic-rebaseを参照してください)。