gitブランチモデルに関する多くのアドバイスを見てきましたが、最も一般的な意見は、masterブランチで直接変更を加えることは悪い考えだと思われます。
同僚の1人がmasterブランチ上で直接変更を行うことを非常に喜んでおり、いくつかの会話にもかかわらず、彼らはこれを変更する可能性は低いようです。
現時点では、マスターに直接取り組むのは悪い習慣である同僚を納得させることはできませんが、私は彼の働き方と矛盾することを理解し、いつ再訪する必要があるかを知りたいですこの問題。
gitブランチモデルに関する多くのアドバイスを見てきましたが、最も一般的な意見は、masterブランチで直接変更を加えることは悪い考えだと思われます。
同僚の1人がmasterブランチ上で直接変更を行うことを非常に喜んでおり、いくつかの会話にもかかわらず、彼らはこれを変更する可能性は低いようです。
現時点では、マスターに直接取り組むのは悪い習慣である同僚を納得させることはできませんが、私は彼の働き方と矛盾することを理解し、いつ再訪する必要があるかを知りたいですこの問題。
回答:
コミットが直接マスターにプッシュされる場合、いくつかの問題があります
新機能には、運用環境にプッシュする前にテスト環境に展開できる独自の開発ブランチが必要であることを彼に説明してください。
それ以外の場合は、機能が半分完成した状態になります。半分完成した機能を実稼働環境にデプロイすることはできません。したがって、masterブランチで直接作業している場合、他の人は、バグ修正を含む他の誰かの変更が実稼働環境に移行する前に、機能の終了を待つ必要があります。
機能に独立したブランチを使用するということは、各新機能を他の機能とは独立してテストおよび展開できることを意味します。
マスターは解放される可能性があります。期間。マスターに半分の作業が終了してはいけません(機能フラグで無効にされていない限り)
それで、私はいくつかのチームが彼らの流れを複雑にするのを見ました。
マスターに統合するときにPRを使用しないのは間違いです。なぜなら、開発者は統合がいつ行われるかを選択する権限を持たないからです。
単一の開発ブランチでは、ほとんど価値がありません。通常、それは物事を複雑にします。多くの機能ブランチは多くの価値をもたらします。
各環境(dev、test、prod)にブランチを作成するのは間違いです。これはgitの範囲外であり、リリースパイプラインで処理する必要があります。まったく同じビルドをすべての環境に展開する必要がありますが、各環境にブランチがある場合は不可能です。
機能が非常に大きい場合、1日または2日で実行することはできません。機能ブランチに対するすべての作業は別々のブランチで行い、PRと統合する必要があります。
まず、gitでは、すべてpull
が文字通り分岐操作であり、すべてpush
がマージであることを指摘しておきます。master
開発者のマシン上では完全に分離支店でmaster
技術的な観点から等しい立って、あなたが共有する中央レポに。私は、ローカルバージョンの名前をupstream
、目的に合ったものに変更したりすることがあります。
これは、多くの組織が同僚よりも効果的にブランチを使用していると考えているためです。実際、彼らは途中でブランチに追加の名前を作成するだけで、それはいずれにしても履歴に保存されません。同僚が1つのアトミックコミットで機能をコミットする場合、機能ブランチのマージコミットと同じくらい簡単にバックアウトできます。機能ブランチの大部分は非常に短命であり、とにかく頻繁にマージされる必要があります。
とはいえ、彼の働き方の主な欠点は2つあります。まず、未完成の機能でのコラボレーションが非常に困難になります。ただし、コラボレーションが必要な場合にのみブランチを作成することは難しくありません。
第二に、マージ前のレビューが非常に困難になります。この点で、実際に彼を説得する必要はありません。github、gerrit、gitlabなどのツールを採用でき、すべてのマージでプルリクエストコードのレビューと自動テストに合格する必要があります。このようなことをしていない場合、率直に言ってgitを最大限に使用していないため、同僚がその可能性を認識していないのも不思議ではありません。
pull
新しいブランチを作成する方法やpush
、マージ操作がどのようになるかはわかりません。むしろ、a pull
は文字通り aにfetch
続くmerge
!
master
をから別のブランチとみなす方法を簡単に確認できますorigin master
。技術的には、2つの異なるリモート上の異なるブランチであり、それぞれに独自の履歴があります。
pull
:Before:異なるコミットを指す可能性のある2つのブランチ-After:同等のコミットを指す2つのブランチ-ブランチが作成されないため、「ブランチ操作」とは呼ばない。2つのコマンドのいずれかがあればpush
、リモートに新しいブランチを作成する可能性があるため、これを呼び出します。しないのはマージです。
ブランチに直接取り組むことに関して「悪い練習」はありません。ただし、プロセスを最もよくサポートするものを決定する必要があります。
質問1:マスターは、ソフトウェアの現在のリリース状態を表す必要がありますか?次に、グローバル開発ブランチを導入し、リリース開発の最後に開発をマージする必要があります。
質問2:コードレビュープロセスが必要ですか?次に、プルリクエストを介してマスターにマージされる(または、ある場合は開発する)「機能ブランチ」が必要です。
質問3:まだ運用環境(またはテスト)に公開すべきではない中間コードの状態を他の開発者と共有する必要はありますか?これは、複数の開発者が機能を開発する場合です。次に、「機能ブランチ」を導入する必要があります。