3

私たちの Mercurial リポジトリでは、非常に大きなファイルを追加し (そして hg プッシュを実行し)、大きなファイルを削除しました (そして別のプッシュを実行しました)。

誰かがhg clone遺言書を作成したとしても、その大きなファイルを削除することはできますか? 削除されたため、作業ディレクトリに表示されないことはわかっていますが、ファイルは引き続き取り出され、Mercurial 内部ストレージに保存されますか?

人々がファイルをプルダウンする必要がないようにしたいと思います。非常に大きなファイルは Mercurial の外部に保存する必要があることを知ったので、ファイルを削除しました。しかし、人々がまだ大きなファイルをダウンロードするのではないかと思っていました。その場合、リポジトリを最初から再作成すると思います。

4

2 に答える 2

6

もちろん、それはまだリポジトリにあります。

いつでも古いリビジョンに戻すことができます。ファイルをコミットしたときに取得したリビジョンに戻すと、ファイルはすべての栄光を保っています。

これを軽減するには 2 つの方法があります (今ではなく、コミットするとき):

  • 大きなファイルの拡張子の 1 つで、これらは基本的に大きなファイルをセカンダリ リポジトリに追加し、2 つをリンクします。そのため、ファイルが存在しないリビジョンに更新し、まだそれを持っていない場合は、更新されません。更新されます。すなわち。それは「オンデマンド」スタイルのプルです
  • ファイルが変更されない場合は、ネットワーク上で利用できるようにしておき、完全なコピーではなく何らかのリンクを作成してください。

現在、次の 4 つのオプションがあります。

  • ファイルを追加した変更セットと、それ以降のすべての変更セットを取り除きます。これは、Mercurial Queues 拡張機能を使用して行うことができます。すべてのクローンでこのストリッピングを行う必要があることに注意してください。ユーザーの 1 人だけが履歴にそのファイルを含むリポジトリを中央のクローンにプッシュ バックすると、変更セットが元に戻ります。
  • リポジトリを手動でゼロから再構築する
  • hg convertコマンドといくつかのフィルタリングを使用すると、--filemapこのオプションを使用できます
  • そのままにしておきます。それはどのくらいの大きさですか、多くの問題になるでしょうか?

手動または手動でリポジトリを再構築するhg convertと、すべてのクローンが無効になることに注意してください。古いクローンから新しいセントラル クローンにプッシュしようとすると、 に関するメッセージが表示されますunrelated repositories。プッシュを強制するのは悪い考えであることに気付くほど頭が良くないユーザーがいる場合、このアプローチでは問題が発生します。

于 2011-02-10T14:01:29.737 に答える
4

はい、ファイルはまだ履歴にあります。完全に削除したい場合は、Mercurial Queues を使用する必要があります — Mercurial wiki のEditing Historyを参照してください。

リビジョン ID が変更されると、クローンが壊れることに注意してください。

于 2011-02-10T13:53:56.923 に答える