4

特定の条件が当てはまる場合、Mercurial リポジトリへのプッシュを禁止しようとしています。ただし、ユーザーが を使用する場合は、プッシュが関係なく通過することが不可欠です。push --force

pre-pushコマンドライン引数をフックに渡すフックを使用して、プッシュを実行しているマシンでこれを行うのは簡単であることを私は知っています。ただし、フックは伝播されないため、何らかの形でリポジトリのすべてのユーザーにフックを配布し、それらをいじらないようにする必要があります。

したがって、状態をチェックし、必要に応じてプッシュを中止するフックをリポジトリ サーバーに配置する方法があると考えましたがprechangegroup、プッシュ中にユーザーが使用したコマンド ライン引数を取得する方法がわかりません。このフック。リポジトリサーバーでフックを使用するだけでこれを達成する方法はありますか?

可能な回避策は、pretxnchangegroup代わりにフックを使用し、最新の変更セットのコミット メッセージが特定のパターンに従っている場合にプッシュを許可することです。ただし、この--forceオプションは、メッセージを正しく取得するためにダミーのコミットを実行する必要がないため、リポジトリ ユーザーの観点からははるかに簡単に見えます。

4

1 に答える 1

3

申し訳ありませんが、--forceコマンド ライン オプションはネットワーク上で送信されることはないため、サーバー側ではまったく使用できません。「私は本当にそれを意味します!」というシグナルを送る何らかの方法を見つける必要があります。特別なユーザー名、特別なコミットメッセージなどです。

禁止フックを持たない 2 番目のサーバー側レポを用意し、プッシャーが本当に意図した場合にのみそれを使用することを検討してください。何かのようなもの:

hg push http://your-server/repo
.. rejected due to hook failure
hg push http://your-server/repo-and-I-really-mean-it

サーバー側では、repo-and-I-really-mean-it リポジトリにはフックがなく、自動的にプレーン リポジトリにプッシュされます。

于 2012-06-07T14:12:13.697 に答える