0

hg convert を使用して作成された mercurial のサブリポジトリがあります。約 3 週間、元の変換済みファイルの 2 つのバージョンがあることに気付く前に、(Windows で Tortoise を使用して) 変更を加えたり、チェックインしたりする人がいました。

例えば

Dir\Project/FileName.ext
Dir/Project/FileName.ext

hg renamehg forget、を試してみましhg removeたが、常に両方のファイルがなくなるか、両方のファイルが存在するように見えます。ケースの折り方の提案も見ましたが、適用されないようです。

修正に関する提案をいただければ幸いです。\ バージョンの歴史を失ったとしても、それは世界の終わりではありません。

ありがとう

4

1 に答える 1

0

変換されたSVNリポジトリでこれが発生するのを見てきました(hgsubversionhg convertを使用していますが、同じ問題があるに違いありません)。私が見たケースでは、パスのsvnプロパティが変更され、明らかに「バックスラッシュを含むファイル名」(パスではない)がsvnに保存されました。

最初のケースでは、それがディレクトリ パスであったため、すぐに問題が発生しました。Windows でディレクトリ パスを使用して長さ 0 のファイルが作成され、その後、ディレクトリを作成できなかったため、更新後に Mercurial が中止されました。同名の。

二重エントリを作成したシーケンスは次のようなものだと思います。

  1. バックスラッシュ付きのファイルパスを含むリビジョンへの更新

  2. Mercurial マニフェストには現在バックスラッシュを含むパスが含まれているため、新しいファイルは追跡されていないと表示されますが、作業ディレクトリを見ると、すべてのファイル パスがスラッシュに正規化されるため、マニフェストには表示されません。

  3. ユーザーが「新しい」ファイルを追加します。

  4. 以降の更新では、両方のパスが更新されますが、一方が作業ディレクトリで他方を上書きします。運が良ければ、新しいバージョンが作業ディレクトリにあるものです。

おそらくWindowsではこれを修正できませんが、Linux(または大文字と小文字を区別するファイルシステムを備えた他のUNIXライクなOS)では、ファイル名を単一引用符で囲むことにより、バックスラッシュバージョンを削除できるはずですhg rm 'Dir\Project\FileName.ext'. 'Dir\Project\FileName.ext'Linux で問題のあるリビジョンに更新すると、作業ディレクトリのルートに実際に名前が付けられたファイルが表示されるはずです。

バックスラッシュのバージョンを削除する必要があることを確認してください。そうでない場合は、必要な結果を得るために手動でマージする必要がある場合があります。

于 2013-03-26T20:23:22.937 に答える