私と私のチームは(gitで)機能ブランチを使用しています。マスターにマージする前に、コードレビューの最適な戦略はどれかと思います。
現在、2つの可能性があります。
第一
2番目
あなたはどちらが良いと思いますかなぜ?多分別のより適切なアプローチがありますか?
あなたの最初のオプションのバリエーションがあります:
例えば。
... ma -- ... -- mm -- ... -- mf <- master
\ \ /
f1 ... fn -- fm ----- <-- fb_#1
どこ:
したがって、最初のレビューでmmとfmを比較し、次にマージしてmfをマージした後、マスターの重要な変更がないことをすばやく確認します。手順1〜3。これにはすべての長所があり、最初のレビューの短所はないようです。
これは、マスターにプッシュされる変更の通常の頻度と比較してレビューが迅速であることを前提としているため、fm-> mfは多くの場合早送りです。
それがnotの場合、何らかの理由で、短所は最初のレビューからマージ後のレビューに移動するだけであり、マスターに直接マージして単一のレビューを行う方が簡単な場合がありますそこ。
第三
あなたはrebase masterのブランチを最新の状態にし、変更を個別に保持します。
これにより、ブランチの新しい履歴が作成されます。同じ内容の新しいIDを持つ新しいリビジョンになりますが、最新のマスターから派生し、古いリビジョンにはリンクされません。古いリビジョンを参照する必要がある場合は、「reflog」で引き続きアクセスできます。紛争解決に間違いを見つけたからです。その上、彼らは無価値です。デフォルトでは、Gitは3か月後にreflogをプルーニングし、古いリビジョンを破棄します。
interactive rebase(git rebase -i
およびgit commit --amend
)変更を並べ替え、編集、クリーンアップして、それぞれが論理的に閉じた変更を行うようにします。
これにより、新しい履歴が再び作成されます。今回は、レビュー中に最も意味のある変更を再構築できるという追加の利点があります。
長所:
通常、余分な作業とは、最初にコードを徹底的にレビューすることを意味し、多くの問題も捕捉されます。
これはLinuxとGitが行うことです。また、20〜25の一連のパッチがレビューのために提出され、それらのプロジェクトで何度も書き換えられるのは珍しいことではありません。
実際、Linuxはプロジェクトの早い段階からバージョン管理を選択していたtarballとパッチでした。長年後、Linusがgitの作成に着手したとき、それがrebase
コマンドを実装する主な理由であり、インタラクティブなバリアントです。また、そのためgitにはauthorとcommitterの別々の概念があります。著者は最初にリビジョンを作成した人であり、コミッターは最後に触れた人です。 LinuxとGitのどちらでも、パッチは電子メールで送信されるため、2つが同じ人物になることはほとんどありません。
GITはSCM方法論の実装よりもSCMフレームワークの実装の方が多いので、実際には3番目の可能性、そしておそらく他の多くの可能性があります。この3番目の可能性はrebase
に基づいています。
rebase
GITサブコマンドは一連のコミット(通常は分岐点からトピックブランチの先端topic
)を取り、別の場所(通常は統合ブランチの先端など)で再生します。 master
)。 rebase
サブコマンドは、新しいコミットを生成します。これにより、確認しやすい形式でコミットを再配置する機会が与えられます。これにより、以前のtopic
と似た一連の新しいコミットが生成されますが、統合ブランチの最上部にルートがあるように見えます。この新しいブランチはGITによってtopic
と呼ばれているため、古い参照は破棄されます。非公式にtopic-0
をブランチの元の状態、topic-1
などとラベル付けし、さまざまなリファクタリングを行います。
topic
ブランチに対する私の提案は次のとおりです。
(オプションの手順)トピックブランチtopic
をその分岐点にインタラクティブにリベースします(commit
の--fixup
オプション、および-i
と--autosquash
オプションを参照) rebase
)を使用すると、確認しやすい方法でコミットを書き直すことができます。これにより、ブランチtopic-1
が生成されます。
トピックブランチを統合ブランチの最上部にリベースします。これはマージを行うのと似ていますが、単なるソフトウェアエンジニアリングのアーティファクトであるマージで履歴を「汚染しません」。これにより、ブランチtopic-2
が生成されます。
master
のチップに対してレビューするチームメイトにtopic-2
を送信します。
topic-2
が問題ない場合は、マスターにマージします。
[〜#〜] note [〜#〜]ブランチ(ここでbranchはコミットツリーを指します)はすべてGITによって同じように呼び出されたため、プロセスの最後では、ブランチtopic-2
のみがGITで名前を持っています。
長所:
短所:
topic-0
の代わりに、3つのブランチアーティファクトtopic-0
、topic-1
、およびtopic-2
がコミットツリーに作成されます。 (いつでも、GITで名前を持っているのはそのうちの1つだけです。)1つ目のシナリオでは、「誰かが「1」の間で何かをマージした場合。 「2.」"は、分岐点の作成からマージを決定するまでの時間を指します。このシナリオでは、「誰かが「1」の間で何かをマージした場合。および「2.」"リベースとマージの間の時間を指し、通常は非常に短いです。したがって、私が提供するシナリオでは、最初のシナリオでは非現実的ですが、ワークフローを大幅に妨害することなく、マージ時にmaster
ブランチを「ロック」できます。
体系的なコードレビューを行っている場合は、コミットを適切な方法で再配置することをお勧めします(オプションのステップ)。
中間ブランチアーティファクトの管理は、リポジトリ間でそれらを共有する場合にのみ問題になります。