場合によっては、許可されるhg pull -u
前にMercurial ユーザーが実行されていることを強制する必要があります。つまり、着信キューが空であることを意味します。さらに、その人がブランチのヘッド バージョンを使用していることも必要です。hg commit
hg pull
どうすればそのような制限を設定できますか?
(これが DVCS 設計コアの一部に反することは十分承知しています)
場合によっては、許可されるhg pull -u
前にMercurial ユーザーが実行されていることを強制する必要があります。つまり、着信キューが空であることを意味します。さらに、その人がブランチのヘッド バージョンを使用していることも必要です。hg commit
hg pull
どうすればそのような制限を設定できますか?
(これが DVCS 設計コアの一部に反することは十分承知しています)
開発者にインストールを依頼できます
[hooks]
pre-commit = hg pull -u
.hg/hgrc
構成ファイル内(このワークフローはリポジトリ固有であるため、おそらくリポジトリごとのファイルにインストールする必要があります)。
これにより、Mercurialは少しSubversionのようになります。開発者は、未解決のチェンジセットを1つだけ持つことになります。ただし、誰かがサーバーにプッシュするとすぐhg pull -u
に、新しいブランチチップに更新できないことに注意してください。これは、ブランチ(トポロジブランチ)を越えて更新するためです。したがって、その時点で適切なマージが必要になります(またはリベース。を参照hg pull --rebase
)。
Adam が言うように、おそらく本当に必要なのは、複数のヘッド (ブランチごと) を防ぐことです。これは、Netbeans の「forbid_2head」フックを使用して行うことです (ここからリンクされています https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads )
その結果、フックは、ブランチに複数のヘッドを作成するプッシュを防止します (つまり、匿名/デフォルト ブランチに 1 つと、名前付きブランチにそれぞれ 1 つ)。プルし、2 つのヘッドをローカルで取得してから、マージまたはリベースして削除する必要があるため、これはコミット前にプルを効果的に強制します。
注、フックはサーバー/マスターリポジトリにあります
通常、Mercurial では、-f フラグ (強制) を使用しないと、開いているヘッドをサーバーにプッシュすることはできません。自動的にプルするフックを作成できますが、サーバーが何を持っているかを認識していないため、サーバー側で強制することはできません。このシナリオに関する Mercurial の Web サイトに記事があり ます。