2

Mercurial 以外で誤ってファイルの名前を変更してしまいました。変更をコミットすると、Mercurial はその変更を 2 つの無関係なファイル (つまり、削除と追加) として扱いました。2 つのリビジョンを比較するために戻る必要がありますが、Mercurial がそれらを異なるリビジョンにまたがる 2 つのそれぞれのファイルと見なす場合、その方法がわかりません。ファイルを比較するにはどうすればよいですか?

4

3 に答える 3

3

Mercurial が名前の変更を認識できるように (そして必要に応じて将来のマージでその情報を使用できるように) 履歴を実際に修正したい場合は、Mercurial wiki のヒントとコツのページに記載されている方法があります。

使いやすくするために現在のコンテンツをここにコピーします (後でリンクが壊れた場合に備えて):

手順:

  1. 名前を変更する前に作業ディレクトリを更新します
  2. 新しいヘッドを作成する実際の「hg rename」を実行します
  3. その新しいヘッドを、「手動で」名前を変更したリビジョンにマージします (ヘッド リビジョンではありません!)。
  4. 最後に、ヘッド リビジョンをこのマージ結果にマージします。

アドバイス:

  1. 念のため、最初にクローンを作成してから作業してください。
  2. 手順が完了したら、ファイル比較ツールを使用して、オリジナルとクローンが同一であることを確認します
  3. 移動したファイルのファイル履歴をチェックして、現在復元されていることを確認します

そうは言っても、その時点でコンテンツを比較するだけであれば、Mercurialに名前の変更を認識させずにそれを確実に達成できます(Stephen Raskuの回答で述べたように)。実際、「hg cat」と外部比較ツールを組み合わせて使用​​すると、Mercurial が認識しているファイルだけでなく、任意のファイルを比較できます。

于 2012-12-09T02:55:30.107 に答える
2

修正履歴:

  • new-filenameで最初のチェンジセットに更新し、ファイルをWCの外部に保存します
  • 不良な置換チェンジセットの親に更新し、ファイルを正しく置換し(名前変更の追跡を使用)、コミットし、2番目のヘッドを取得しました
  • 新しい良いチェンジセットの上に古い匿名ブランチからのすべてのチェンジセットをリベースします
  • --close-branch交換不良のチェンジセットで、またはこの不要なチェンジセットを削除するか、非アクティブなヘッドをそのまま残します
于 2012-12-07T21:06:46.463 に答える
2

使用しているオペレーティング システムについては言及していません。以下は、Linux の bash で機能します。

diff <(hg cat -r rev1 file1) <(hg cat -r rev2 file2)

vimdiff視覚的な差分が必要な場合のように、差分を別のプログラムに置き換えることができます。

于 2012-12-07T22:13:16.217 に答える