web-dev-qa-db-ja.com

Mercurialリポジトリの破損

これは この質問 にいくらか関連していますが、別の質問です。

SSHおよび Mercurial-server を介してユーザーに提供される中央のHgリポジトリがあります。 Mac、Linux、Windowsのクライアントが多数接続しています。

Windowsユーザーの1人がリポジトリを破損し、中央のリポジトリにプッシュバックして破損したことが2回発生しました。中央リポジトリが破損する場合にトランザクションが受け入れられないように、中央リポジトリに着信フックスクリプトを記述したいと思います。

残念ながら、私はそのようなスクリプトを書くのに十分なMercurialについて知りません。他の誰かがこれに遭遇した可能性はありますか?個人的には、hgがデフォルトでこれを行わない理由はよくわかりません。

14
bobinabottle

Mercurialの最近のバージョン(1.5以降)は、受信データの検証をサポートしています。追加

[server]
validate = True

サーバーのhg構成に(.hg/hgrcまたはhgwebdir構成は正常に機能するはずです)サーバーに受信データを検証させ、無効なプッシュを拒否させます。クライアントには、次のようなエラーが表示されます。

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

お役に立てば幸いです。

4
durin42

たぶん、リポジトリへのプッシュは完全に避けるべきです。 Mercurialとその分散型の性質により、誰もがブランチを持つことができ、準備ができたと感じたら、彼らはあなたに話し、あなたは彼らから引っ張ります。コミットアクセスの問題も、問題を壊すプッシュもありません...

これは、私がSVNからMercurialに移行していたときに、少なくとも私の友人からのアドバイスです。

これがあなたの選択肢であるかどうかはわかりませんが、すべての人のために個人リポジトリを設定してから、必要な人からプルする方が、危険なプッシュをキャッチしようとするよりも少ない作業で済みます。

2
AdamTheCamper

考えられる代替案の1つは、次のとおりです。

  1. プッシュ後にリポジトリのクローンを作成します。
  2. 確認してください。
  3. リポジトリが良好な場合は、最新の良好なリポジトリとしてアーカイブします
  4. リポジトリが破損している場合は、アラームを発生させます
  5. アラームが発生した場合は、最新の既知の良好なリポジトリを復元します。

このソリューションは必要なものではありませんが、少なくとも、破損した場合にリポジトリをロールバックする方法があります。

0

David Herronのブログ と同じことはできませんが、事前ルーティングではなく、中央リポジトリの事前コミットフックで実行しますか?

0
Ryan Gibbons