Mercurialリポジトリの破損


14

これはこの質問に多少関係しいますが、別の質問です。

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

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

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


ここで解決策を見つけました:davidherron.com/blog/topics/…すべてのクライアントで実行する必要があります。しかし、中央レポ自体に対して行うことができるより良いソリューションを誰かが持っている場合、それはより良いでしょう。
bobinabottle 2009

サーバーと各クライアントで使用しているMercurialのバージョンを教えてください。
マーティンガイスラー

2
また、これを再現できれば、私たち(Mercurial開発者)にとって非常に便利です。メーリングリストから直接このような問題を報告してください:mercurial.selenic.com/wiki/MailingListsまたはバグトラッカー:selenic.com/mercurial/btsここに投稿するよりもはるかに生産的です:-)
Martin Geisler

回答:


4

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

[server]
validate = True

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

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

お役に立てば幸いです!


2

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

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

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


HGにプッシュしないと、その全体の目的に反し-複数のユーザーが共同作業
Anonymouse

0

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


いいえ:-(私はそれを試しましたが、デッドロックになります。クライアントがそれをプッシュしようとすると、リポジトリのロックが予約されます。「hg verify」の実行もロックを必要とするため、無限ループ
bobinabottle 2009

また、これがプリコミットで機能したとしても、リポジトリを検証し、問題ないことを確認してから、破損する変更をコミットします。本当に、トランザクションをロールバックする場合、受信した変更がレポジトリを破損するかどうかを評価するフックが必要になります。したがって、changegroupフックを使用する方が理にかなっています。
bobinabottle 2009

(changegroupフックを使用すると、依然としてデッドロックが発生します)
bobinabottle 09

興味深い-フックはpythonベースのようです。リポジトリの破損を知っていますか?毎回同じことですか?
ライアンギボンズ

0

可能な選択肢の1つは次のとおりです。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.