ほぼ毎日更新およびリリースするWebアプリがあります。 VCSとしてgitを使用しており、現在の分岐戦略は非常に単純で壊れています。マスターブランチがあり、それに「気分が良い」変更をチェックします。これは機能しますが、重大な変更をチェックインするまでです。
小規模チームのお気に入りのgitブランチ戦略はありますか。次の要件を満たしています。
理想的には、新しいバグに取り組んでいる開発者の段階的なプロセスを見てみたい
Scott Chaconが Pro Git で説明しているワークフローの恩恵を受けることができます。このワークフローには、常に存在する2つのブランチ、masterとdevelopがあります。
masterはプロジェクトの最も安定したバージョンを表し、このブランチから本番にのみデプロイします。
developには進行中の変更が含まれており、必ずしも本番の準備ができているとは限りません。
developブランチから、トピックブランチを作成して、個々の機能と修正を処理します。機能/修正の準備ができたら、それをdevelopにマージします。この時点で、同僚がマージした他のトピックブランチとの相互作用をテストできます。一度developは安定した状態です。マージしてmasterにします。 masterから本番環境にデプロイすることは常に安全である必要があります。
スコットは、これらの長期実行ブランチをコードの「サイロ」として説明します。安定性の低いブランチのコードは、テストとチームによる一般承認の後、最終的に「安定」と見なされるコードに「卒業」します。
ステップごとに、このモデルでのワークフローは次のようになります。
このワークフローの詳細については、Pro Gitの Branching Workflows の章をご覧ください。
ソース管理を使用したことがない他の開発者に教えるための簡単な戦略を見つけようとする初心者として入った後。これは適合するものです http://nvie.com/posts/a-successful-git-branching-model/ manページにある標準のGITワークフローを使用しようとしましたが、少し混乱しましたそして私の聴衆は完全に。
過去6か月間、競合を2回修正するだけで済みました。マージ後に常にテストし、機能の開発中に「フェッチとマージ」または「プル-リベース」を何度も(朝と午後に1回)実行する手順を追加しました。また、最新のコードを取得する中心的な場所としてgithub.comを使用しました。
(最初に私が持っているべきであるように、私の コメント をそれ自身の答えにしました。)
GithubのScott Chaconから:
それでは、GitHub Flowとは何ですか?
- Masterブランチのすべてがデプロイ可能です
- 新しい何かに取り組むには、マスターから説明的な名前のブランチを作成します(例:new-oauth2-scopes)
- ローカルおよび定期的にそのブランチにコミットするサーバー上の同じ名前のブランチに作業をプッシュします
- フィードバックまたはヘルプが必要な場合、またはブランチのマージの準備ができていると思われる場合は、pull requestを開きます
- 他の誰かが機能を確認してサインオフしたら、マスターにマージできます
- マージされて「マスター」にプッシュされると、すぐにデプロイできます。
詳細については、記事全体を参照してください: http://scottchacon.com/2011/08/31/github-flow.html
「プルリクエスト」はGithubの発明であり、Git自体ではなく、ウェブサイトに焼き付けられているものです。 https://help.github.com/articles/using-pull-requests/
master
ブランチを開発ブランチとして使用し、バグ修正を実行するためのリリースブランチを作成します。
新しい機能は、開発ウィンドウ中にmaster
で実行されます(直接コミットされるか、プルリクエストを使用したトピックブランチとして、あなた次第です-グラフィックには表示されていません)。計画されたすべての機能が実装されたら、機能フリーズに入り、テストを実行します。満足したら、master
のリリースにv1.0
のタグを付けます。
時間が経つにつれて、ユーザーはv1.0
のバグを見つけるので、そのタグからブランチを作成し(たとえば、リリース1.0
に名前を付けて)、ブランチ内のバグを修正します。十分なバグが修正されたので、新しいリリースを保証するものと思われる場合は、v1.0.1
としてタグ付けし、master
にマージして戻します。
一方、新しい開発ウィンドウがmaster
ブランチで発生し、最終的にv1.1
としてタグ付けされます。
すすぎ、繰り返します。
これは、 セマンティックバージョニング 番号付けロジックに従います。
---------(v1.0)--------------------------------(v1.1)-----------------------------> master
\ \
---(v1.0.1)---(v1.0.2)---> 1.0 ---(v1.1.1)---(v1.1.2)---> 1.1
VCSでは、1つのブランチですべての開発作業を同時に行うことはできないため、「マスター」ブランチのみがあるとすぐにその限界が明らかになります。
つまり、分岐するタイミングを知る必要があります。
ただし、DVCS(「分散」VCSの場合)には、公開の問題があり、ブランチはローカルのままですリポジトリ、およびプッシュまたはプルするブランチへ。
このコンテキストでは、並行開発の取り組みを特定することから始め、公開(プッシュ/プル)プロセスを決定します。例えば(これが唯一の方法ではありません):
SO question attests のように、他のリリース管理プロセスが存在します。
ReinHのアジャイルチーム向けGitワークフローを読む: http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html
これは小規模なチームに非常に有効です。ここでの目標は、潜在的に不安定になる可能性のあるすべてのものが何らかの種類のブランチに入るようにすることです。機能ブランチの外で作業している全員がそれを使用する準備ができている場合にのみ、マスターにマージしてください。
注:この戦略はgit固有のものではありませんが、gitはこの戦略の実装を非常に簡単にします。