3

私は 5 人の開発者のチームでより大きなプロジェクトに取り組んでおり、Mercurial を VCS として使用しています。

私たちは皆、機能/修正をプッシュする準備ができていると判断するまでローカルで作業してコミットし、変更をマージしてプッシュする傾向があります。私は通常、他のほとんどの人と同じように、1 日に数回プッシュ (およびリモートとのマージ) を行います。

多くの場合、これは「マージ クラッタ」につながります。複数の開発者が変更セットをプル、マージ、プッシュします。結果の履歴はあまりきれいではなく、次のようになる場合もあります。

混乱をマージ

その混乱の中で特定の変更セットを分離したり、それがどのように/何がどのように影響したかを理解することさえできるとは思えません(少なくとも私はその見通しに身震いします)。

マージが必要な場合、上記の履歴は問題ないと思いますが、これらのマージのほとんどは、リベースによって (安全に) 回避できます。

実際の質問:

  • VCS の履歴が上記のように表示されるのは「正常」ですか? そのような歴史は避けるべきですか?
  • そのような歴史をどのように避けることができますか?

「回避」部分について: 私たちが取り組んでいるタスクは多少分離されているため (バックエンド、フロントエンド、Web)、それらをブランチに分割したり、場合によっては別々のリポジトリに分割したりすることもできます。ただし、プロジェクトは互いに完全に独立しているわけではないため、いくつかのリポジトリに分割すると、利益よりも苦痛が生じると思います。名前付きブランチの方がはるかに優れているかどうかはわかりません.3つ以上のブランチが常に存在するため、頻繁にトランクにマージする必要があります.

特に多くの変更セットが互いに完全に独立しているため、リベースはオプションのように思えますが、リベースするかどうかを決定する負担が開発者にかかります。競合が発生する可能性があり、最終的にはマージする必要があります。これにより、そもそもリベースしない人が出てくる可能性が高いため、現在の状態に戻りました。

今のところ、履歴をきれいに見せるための別のオプションは考えられません。今はあまり問題にならないかもしれませんが、開発者が突然 20 人になったらどうなるでしょうか。歴史が一つの大きな迷路だとしたら、その意味は何だ?何十もの交差がある場合、変更セットの影響を追跡するのは難しいと思います。

4

3 に答える 3

3

あなたが見ているのは、多かれ少なかれ、複数の開発者がすべて同じリポジトリで作業しているときに何が起こるかということです。

それを回避する唯一の実際の方法は、特にローカルコミットを行った場合に、履歴を書き換えることです。プルし、リベースしてからプッシュする必要があります。

編集:あなたの改訂グラフについて私を驚かせることが1つあります。ブランチからの分岐や、これらのサブブランチ間でのマージはたくさんあります。それは、まあ、混沌としているように見えます。分岐とマージが見た目と同じくらい混沌としている場合、おそらくあなたのチームは分岐とマージへのより構造化されたアプローチから利益を得ることができます。

git-flowに影響を与えた「SuccessfulGitBranchingModel」は、Mercurialリポジトリにも適用できます。 hgflowは、それを実装するのに役立つ拡張機能です。

それがあまりにも多くの構造のように見える場合は、いつでも別の方法を見つけることができます。ただし、いくつかの考えを投資してチームの注意を引くことは価値があるかもしれません。

参照:commit-pull-merge-pushまたはpull-merge-commit-push?

于 2012-09-18T17:33:11.820 に答える
3

はい、リベースを使用し、 Noisyがセーフ(hg-2.1 以降) とsimpleをマージしないようにします。

あなたは 5 人の開発者からなる小さなチームです。上記のすべてのマージは、 「ボブがパート Y に取り組んだのと同時にパート X にコミットした」ために発生する可能性が最も高いです。これらのマージは有用な情報をもたらさず、誰もあなたのマイクロブランチを独立して使用することを気にしません.

履歴にブランチを保持することは、適切なセマンティクスがある場合 (例:バグ修正のための安定ブランチ、新機能のためのデフォルトブランチ)、または変更が成熟するのに長い時間がかかり、他のものとマージするに値する場合に役立ちます。他のマージは私にとって単なるノイズです。

フェーズ(Mercurial 2.1)の導入以来、(デフォルトで) Mercurial ではローカルの変更セットのみをリベースできるため、リベースを使用することは非常に安全です。新しいワークフローは次のようになります。

  • クローン
  • ハック
  • 専念
  • ハック
  • 専念
  • 引く
  • リベース
  • テスト
  • 押す
于 2012-09-20T10:00:24.093 に答える
1

抽象化のレベルが多すぎて、複雑すぎると不満を漏らしています。ビューをブランチのメインラインに限定するオプションがあります。これを使って。特定の必要がある場合にのみ、マージされたブランチを詳しく調べてください。リベースで履歴を破棄するよりも、履歴を利用可能にして不要にする方がよいでしょう。

于 2012-09-18T18:12:01.860 に答える