8

通常、次を に追加して拡張機能を有効にします.hg/hgrc

[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:

ただし、この構成をバージョン管理、つまりリポジトリの一部にして、他の人 (同僚、マシンのビルド) がリポジトリのクローンを作成できるようにする必要があります。リポジトリを複製する人は、これらの拡張機能を有効にするために何もする必要がないことに注意してください。

ドキュメントからは不可能のようですが、ここで私を助けることができる巧妙なトリックを知っている人はいますか?

4

4 に答える 4

10

レポをクローンする (フックまたは構成を更新する) ときに、mercurial が自動的に何かを実行するようにします。ドキュメンテーションはそれが不可能であると述べており、いくつかの非常に正当な理由を示しています。

Hooks do not propagate

In Mercurial, hooks are not revision controlled, and do not propagate when you clone,
or pull from, a repository. The reason for this is simple: a hook is a completely    
arbitrary piece of executable code. It runs under your user identity, with your 
privilege level, on your machine. No comments

It would be extremely reckless for any distributed revision control system to 
implement revision-controlled hooks, as this would offer an easily exploitable way to 
subvert the accounts of users of the revision control system. No comments

明らかに、mercurial 自体は問題を解決しません。問題を解決するために水銀以外は何も望んでいないと明確に述べているので、答えは次のとおりです。あなたが求めていることは不可能です。

問題を解決する唯一の方法は、すべてのユーザーが、適切なフックをインストールするなど、必要なアクションを実行する特定のスクリプトを少なくとも 1 回実行/インストールする必要があることです。

これについて賢くしたい場合:

  • 正しい構成を .hg またはユーザーにコピーするためのフックをインストールする、実行する 1 回限りのスクリプトを作成します。
  • フックがインストールされたら、スクリプトを更新して構成の更新をユーザーに配布できることを確認してください
  • メッセージをコミットするための特別なマーキングをフックに追加させる
  • 特別なメッセージを持たない中央リポジトリのコミットを拒否する

少し複雑ですが、それがあなたの要件に最も近いと思います:

  • ユーザーがスクリプトを 1 回実行すると忘れてしまう
  • 実行しなかった場合、中央リポジトリにコミットできないことを確認できます
于 2009-05-13T08:09:58.613 に答える
1

ProjRC 拡張機能を使用すると、その問題を解決できる場合があります。

「この拡張機能により、Mercurial は追加の構成設定のために .hg/projrc を探して解析します。ファイルはクローンとプルで転送されます (ただし、プッシュでは転送されません)」</p>

于 2012-07-02T09:46:43.120 に答える
0

バージョン管理されるように、から.hg/hgrcなどへのリンクを作成するのはどうですか。customhg/hgrc次に、それをコピーして戻すフックを作成する必要があります.hg/hgrc。たとえば、更新のたびに。

于 2009-05-13T07:23:52.090 に答える