大規模なMercurialリポジトリは「プッシュレース」の影響を受けますか?


9

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

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

私が見る問題

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

聞き覚えがある?

これは非常に大きく人気のある水銀レポの実際の問題ですか?誰もがその日の最後のプッシュを行うとき、社内ではどうですか?


誰が水銀で分岐しないのですか?hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
カーソンマイヤーズ

@Carson In Gitブランチは安価です。水銀では、それらはより永続的です。一般的に私はgitではブランチで機能に取り組み、mercurialでは新しいヘッドを作成するか、別のディレクトリにクローンを作成すると聞きました。
TheLQ

--close-branchコミット時にを追加できます-そしてmercurialはブランチに名前を付けました。新しいディレクトリに複製する必要はありません
Carson Myers

@カーソン私はあなたができないか、それが不可能であると言っているのではありません。私はいつも、慣習はブランチではなく新しいヘッドを複製または作成することだと聞いただけです。私が見たほとんどのMercurialリポジトリにはブランチがいくつかしかありませんが、gitリポジトリには束がある傾向があります
TheLQ

よくわかりません、gitを使用したことがありません
カーソンマイヤーズ

回答:


8

私が知っている限り、DVCSを使用する大規模なオープンソースプロジェクトのほとんどは、プッシュの代わりに「プルリクエスト」を使用します。 、もしあれば。これにより、「プッシュレース」に名前を付けたときの必要がなくなります。

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

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

ときどき(ごくまれに)2人が同時にこれを試してみます(通常、誤解のため)。この場合、「失う」人は、再プル、マージ、プッシュする必要があります。中央リポジトリにコミットするための午後5時の急ぎはないので、あなたが概説した問題は実際にはそこにはありません。

それがDVCSの優れた点です。分岐は簡単なので、誰もが自分のブランチで作業できます。

編集

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


ブランチではなく、実験的な機能に取り組むためにクローンを作成することはいつも聞いていました。私が聞いた理由のほとんどは、MercurialブランチではGitよりもずっと永続的であるということです。しかし、私は間違っている可能性があります
TheLQ

それがMercurialがクローンあるかどうかに関する限り、ブランチですが、標準の「ヘッド」で実行できるほとんどすべての操作を実行できますが、プル/トランクからの距離のプッシュレベル。永続性の意味がわからないので、クローンを使い終わったら、削除してください。
エドジェームス

なぜ午後5時のプッシュラッシュがないのですか?
Cem Catikkas

私が言ったように、ほとんどの場合、全員が自分のブランチで作業しています(あなたが他の人とまったく同じ問題に取り組んでいる可能性は非常に低いです)。さらに、私の仕事ではフレックスタイムがあるので、午後4時から午後6時までのラッシュです;)
Ed James

1

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


OPはここでgitとhgを区別していますが、答えはgitを対象としています(たとえば、最初のリンクは非常にgit指向です)。これは正解です(hgでの分岐のOPの元の誤解が質問自体につながるため)が、hgでも同じであることは注目に値します。
エドジェームス

@Edグッドポイント。回答がgitとmercurialの両方に適用されることを明確にするために更新されました。
Rein Henrichs、2011年

リポジトリgit.gitを参照してください。これは、DVCSを使用したマージの良い例です。マージポイントはたくさんあります。最終的にメインブランチにマージされる前に、10を超える一時的なブランチが同時に存在する場合があります。
linquize
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.