2

Mercurial リポジトリ (「foo」と呼びましょう) で、バージョン管理全般、特に Mercurial の初心者と協力する必要があります。

私は、Mercurial 側 (混乱) と私側 (後始末) のどちらにも余分な労力をかけずに Mercurial を使用できるようにするワークフローを考え出そうとしています。

私の懸念は、初心者として彼らが間違いを犯すことを期待する必要があり、彼らが制御された方法で間違いを犯すことを許可する必要があるということです。しかし、悪い変更によってリポジトリが不必要に汚染されることは望ましくありません。

mqそれらが適切にマージされたり、拡張機能を使用したりできるとは思いません。これは過小評価の問題ではなく、過去の SVN の経験と私自身の Hg の経験を考慮した現実的な評価です。

次のアプローチのうち、最も理にかなっているのはどれですか? または、より良いアプローチがある場合、それは何ですか?

  1. foo-submit誰でも読み取り/書き込み可能なリポジトリと、すべてのユーザーがfoo-trunk読み取り可能で、管理者が書き込み可能なリポジトリがあります。ユーザーは からプルしfoo-trunk、変更を にプッシュしますfoo-submit。クリーンアップ: 良い変更が見つかった場合は、そのまま通過させます。悪い変更を見つけた場合は、以前のバージョンとマージして「バイパス」します。

  2. foo-trunkすべてのユーザーが読み取り可能で、管理者が書き込み可能なリポジトリがあります。各ユーザーは、チームの他のメンバーが読み取りアクセスできる独自のクローンを維持する責任があります。誰かが変更をプッシュしたい場合、彼らは私に知らせ、必要に応じて適切なクリーンアップを行ってリポジトリからプルします (#1 と同じ)。

  3. foo-dev誰でも読み取り/書き込み可能なリポジトリと、すべてのユーザーがfoo-trunk読み取り可能で、管理者が書き込み可能なリポジトリがあります。ユーザーは foo-dev にプル/プッシュし、広範な開発を行う必要がある場合は名前付きブランチで作業します。マージとクリーンアップの実行を担当しています。foo-trunkリポジトリは、ヒントが常に良好な状態にあるブランチを持つ「クリーンな」コピーを保持するためだけのものです。

4

3 に答える 3

2

良い質問であり、素晴らしい答えを見たことがない質問です。

そうは言っても、私はオプション 2 が好きです。これは、Linux カーネルで使用され、GitHub で普及した「プル リクエスト」モデルです。これにより、管理者はゲートキーパー/レビュー担当者として機能し、良い変更セットが満足している場合にのみそれらを通過できます。開発者が価値のあるものを提供していないと判断した場合、プル リクエストは (理由とともに) 拒否されます。その後、開発者は立ち去り、コード/レポを修正し、別のプル リクエストを送信できます。

RhodeCodeのようなものを使用してサーバーを実行すると、プル リクエストを処理するのに役立ちます。物事が大きくなるにつれて、サブシステムを扱う下位レベルのゲートキーパーと、プロジェクト全体を扱う上位レベルのゲートキーパーを持つことができます。

私がよく理解していないのは、拒否された変更セットに何が起こるべきか、そして開発者が修正して再試行するのではなく放棄することを決定することです。それらはクローズされる可能性がありますが、将来のプル リクエストの一部として誤って表示される可能性があります。それらは無害ですが、混乱を招く可能性があります。別の方法はそれらを剥ぎ取ることですが、それは人々に自分自身を切り刻むツールを与えるように聞こえます.


あなたが与える他の2つのオプションは、少しコメントする価値があります.

1 は 2 に似ています。まだ「プル リクエスト」タイプのフローを実行していますが、開発者のクローンをミラーリングするサーバー側のブランチができました。ほとんど違いはありません。RhodeCode、GitHub、BitBucket サーバーを使用すると、変更を探しに行く必要がないことを除いて、このように作業できます。サーバーは、あなたが見るのを待っていることを伝えます。

3 には、変更に到達する前に全員の変更がすべてマージされるという問題がありfoo-devます。それらは相互に依存し始め、チェリーピッキングは面倒になります. おそらく、新しいハッシュで新しい変更セットを作成していることを意味するgraft、変更セットを ing することになるでしょう。foo-trunk開発者がそれらをプルすると、2 つの場所に変更が加えられます。元のfoo-devバージョンと移植されfoo-trunkたバージョン。これは私には持続可能ではないように思えます。

于 2013-04-23T16:57:31.643 に答える
1

mq を使用したくない場合に考えられる最善の方法 (最小限の手間で理解してください) は、開発者を持つことです。

  1. 現在開発中の機能用に独自のブランチを作成する
  2. 完了して検証されたら、メインの開発ブランチ (または移植/移植) にマージします。
  3. その後、ブランチを閉じます。

長期的には、彼らが mq を学ぶことを期待してください。把握するのはそれほど難しくありません。

于 2013-04-02T18:21:58.283 に答える