3

TLDR:親Xを持つHGバンドルがありますが、リビジョンXがリポジトリに存在しません。ただし、リビジョンYのファイルはリビジョンXと同じであると確信しています。バンドルを適用するにはどうすればよいですか?

バックグラウンド:

hgsubversion私はSVNリポジトリと対話するために使用します。

コミットしたくない変更がいくつかありました。hgsubversion部分的なプッシュはサポートしていません。

以前は、一時的なエクスポート/パッチファイルを手動で作成するか、.origファイル(の結果hg revert)を手動で復元することで回避策を実行していました。

この場合、プッシュしたくない変更をコミットしてから使用hg stripし、次にプッシュしてから使用しようとしましたhg unbundle .hg/strip-backup/file

問題hgsubversion元のチェンジセットを、コミット後にSVNからインポートした新しいチェンジセットに置き換えます。結果:チェンジセットIDが変更されます。hg unbundle親のチェンジセットがそこにあることに依存しているため、これは機能しなくなったため、これは問題です(ただし、削除されています)。

皮肉なことに、hgsubversionそれ自体がstripバックアップファイルを使用しているため、新しいリビジョンを削除し、削除された古いリビジョンを追加し、バンドルをリビジョンとともに適用し、パッチをエクスポートし、両方を削除し、SVNリビジョンを復元するために使用できます。しかし、これは聞こえます...非常に苦痛で愚かです。私にできることは他にありませんか?

hg transplantリポジトリに親がいない場合もバンドルが気に入らないようです)

4

2 に答える 2

3

バンドルの正確な親変更セットなしでバンドルを使用することは事実上不可能です。バンドルは、正確なバイナリ ソースにのみ適用できるコンパクトなバイナリ デルタで構成されます。パッチのように他のリビジョンに適用する方法を Mercurial が推測できる「コンテキスト」はありません。Mercurial のコアでは、変更セットが削除されることはないため、これは問題になりませんが、hgsubversion や mq などの拡張機能はルールを破っています。

(削除された変更セットを .hg/strip-backup のバックアップ バンドルから復元できる場合は、変更をリベースして再度削除できます。)

于 2011-10-02T22:26:46.507 に答える
0

背景hgsubversionが1つのリビジョンのみを正常にプッシュするという問題が発生した後、コミットが怠惰になり(プッシュしたい最新のリビジョンに更新すると、部分的なコミットが可能になります)、すべてをコミットし始めました。それで私はプッシュを殺しました、そしてそれは私の後の改訂を維持するのに初めて失敗しました。

リカバリを試みましたが、親のコミットを見つけることができませんでした。私のために働いたのは...-backup.hgファイルを復元することでした(...-temp.hgストリップバックアップにもファイルがありました)。

奇妙なこと(これに答えているのはそのためです)は、親がそこにいないという警告しか出さなかったということです(理由はわかりません)...

warning: ignoring unknown working parent d5663567bc4b!
adding changesets
adding manifests
adding file changes
added 21 changesets with 1255 changes to 941 files
(run 'hg update' to get a working copy)

ところで、私はMercurialバージョン2.0を実行しています

于 2011-12-29T17:54:41.373 に答える