web-dev-qa-db-ja.com

大規模なMercurialリポジトリは「プッシュレース」に苦しんでいますか?

Programmers.SEに関するいくつかの質問に対するいくつかの「なぜDVCSが優れているのか」の回答を読むと、大規模なプロジェクトではコミットレースがないため、一般的にDVCSの方が優れていると言われているようです。IEコミット、期限切れなので更新、コミット、期限切れ、コミット、まだ期限切れなど.

DVCSは、プッシュの概念でこれを制限します。しかし、非常に大規模なプロジェクトでは、特に1日の終わりに「プッシュレース」が行われることはないでしょうか。私はGitでこれがすべての定数分岐によっていくらか改善されることを知っていますが、Mercurialでは分岐せず、新しいヘッドを作成します。

私が見る問題

  1. ユーザーがプッシュしようとします
  2. 古い(ローカルリポジトリが古い場合、Mercurialではプッシュできないため)ローカルの変更をプルしてマージする
  3. ユーザーがもう一度プッシュしようとしましたが、プッシュされた他の誰かをマージしているときに、再び古くなっています
  4. プルアンドマージ
  5. まだ時代遅れです
  6. 繰り返す

おなじみですか?

これは、非常に大規模で人気のあるMercurialリポジトリの実際の問題ですか?誰もがその日の最後のプッシュを行うとき、会社の内部はどうですか?

9
TheLQ

DVCSを使用する大規模なオープンソースプロジェクトのほとんどは、プッシュの代わりに「プルリクエスト」を使用します。つまり、ユーザーがプロジェクトをブランチからプルするように要求し、プロジェクトはこれらのプルリクエストを任意の順序で実行することを選択できます。 、もしあれば。これにより、名前を付けた「プッシュレース」が不要になります。

他の会社では私はプロセスを保証することはできませんが、私が働いている場所ではこれは問題ではありません。

ケースに取り組んでいるときは、リポジトリ全体のブランチに取り組んでいるので、プッシュリクエストはメインバージョンのリモートバージョンに送信されます。 (終了した)変更をトランクに統合する場合は、トランクをロードし、プル、マージ、プッシュします。

たまに(非常にたまに)2人が同時にこれをしようとします(通常は何らかの誤解のため)。この場合、「負けた」人は誰でも、再プル、マージ、プッシュする必要があります。中央リポジトリにコミットするための午後5時のラッシュは存在しないため、概要を示した問題は実際にはありません。

それがDVCSの美しさです。分岐は簡単なので、誰もが自分の分岐で作業できます。

[〜#〜]編集[〜#〜]

ああ、私はあなたの「マーキュリアルではあなたは枝分かれしない...」というコメントに気づきました:はい、あなたはそうします。必ずしもそうする必要はありませんが、そうするのはとても簡単であり、そうすることの利点はそうするよりもはるかに重要であるので、単にリポジトリをブランチ化する傾向があります。

8
Ed James

いいえ、作業が行われるため、プッシュレースはありません トピックブランチ内 。マージマスターは、ブランチを結合して 統合ブランチ にする(比較的低い)複雑さを管理します。これは通常、継続的に行われます。分散バージョン管理ワークフローの詳細については、最初のソースは馬の口です:man gitworkflowsここからオンライン 。 Mercurialワークフローdoは、あなたの主張とテクニックは似ていますが、分岐を使用します。

1
Rein Henrichs