1

リポジトリ内のバージョン管理されたファイルの特定のバージョンを削除する必要がありますが、その方法がわかりません。

hg cat --rev [バージョン] [ファイル名] を使用してファイルを表示できますが、削除する方法がわかりません。

特定のファイル バージョンを削除する方法を知っている人はいますか?

4

1 に答える 1

3

簡単な答え: レポが公開されている場合、それは非常に困難です。プライベートならもっと簡単。


長い答え: 変更セット指向の CVS である Mercurial は、実際にはファイルのリビジョンを保存しません。代わりに、リビジョン間の変更 (差分) を保存します。

それに加えて、すべての変更セット ID は、リビジョンの内容に基づいて暗号化ハッシュとして計算されます。これは、単一の変更セットを変更すると、そのすべての子孫の変更セットが変更されることを意味します。これは、Mercurial で履歴を書き換える代償です。

プライベート リポジトリ

変更する必要がある変更セットがどこにもプッシュされていない (またはリポジトリ自体が非公開である) 場合は、必要に応じて履歴を変更できます。

  • 変更セットが最近のものである場合は、Mercurial Queuesの使用を検討してください。変更セットをキューにインポートし、問題の変更セットに移動して、特定のファイルへの変更を元に戻し、残りのキューを再適用できます。

  • 変更セットがかなり前にコミットされた場合、おそらくその親に更新し、問題のある変更セットを移植し (おそらくダミーの変更セットに貼り付けて機能させる必要があります)、それを MQ にインポートし、変更してからrebase --detach、その上に残りの祖先。

公開レポ

プライベート リポジトリでも同じことができますが、系統のコピーが作成されることに注意してください。

-- 1 -- 2 -- A -- B -- C -- D    original A and its descendants
         \
          A' -- B' -- C' -- D'   modified A' and its descendants

A–<code>D を–<code>D' に置き換えた後でもA'、レポからプルしたすべての人はまだA–<code>D を持っています! 彼らにこの血統を剥がす方法を見つけなければなりません。

于 2012-05-27T11:47:20.053 に答える