2011-02-10 31 views
5

MercurialリポジトリはSubversionから少し前に変換されており、今日はには履歴があるファイルがあることに気付きました。 クローン後のリポジトリ内のファイルですが、履歴はありません

> hg clone [repo] 
> hg st -c FileWithMissingHistory.cs 

C FileWithMissingHistory.cs 

> hg blame FileWithMissingHistory.cs 
FileWithMissingHistory.cs: no such file in rev [...] 
> hg log FileWithMissingHistory.cs 
> hg log FileWithMissingHistory.cs -f 
abort: cannot follow nonexistent file: "FileWithMissingHistory.cs" 

> hg log -v | grep FileWithMissingHistory.cs 

[gives output, there arechangesets mentioning the file] 

が明らかにファイル名を例に変更されました。この行動のsympomtsの

一つは、HGが同じファイルに対してレポートノーチェンジを記録していないながら、HG状態は、クリーンファイルを報告していることです。私はhg verifyを使ってみましたが、このコマンドはrepoが正常であると報告します。誰もがこれを経験し、歴史を「生きる」ためにできることは何かありますか?問題のファイルにダミーヒストリを配置することは許容されますが、最適ではありません。

EDIT: 私はいくつかのより多くの調査が行われ、私はHGが-r238を更新し、HGログオンしない場合は、「FileWithMissingHistory.csは」リビジョン238で、別のファイル名(HGコピー+削除)から改名されたことに気付きましたこのリビジョンのファイルには履歴がありません。元のファイルにhg logを実行すると、履歴が予期したとおりに報告されるため、コピー中に履歴が失われているように見えます(hg copyを使用してファイル名が変更され、ファイルがコピーされたことが明示されます)。

+1

次のコマンドの出力は何ですか? 'hg version'、' hg identify'、 '' hg summary''、 '' hg verify''のどれか? 'hg manifest'はファイルをリストしますか? –

+0

hg version = 1.7.3、hg identifyは現在のチェンジセットID(何もありません)を表示し、hg summaryはメッセージとその親(親が1つのみ)のコミットを表示します。 hg manifestは問題のファイルをリストします。 – larsmoa

+0

'' hg verify'はどうですか? –

答えて

1

私はついに上記の影響の原因を追跡しましたが、これはケーシングの問題が混在しているためです。ファイルの中には、小文字の名前のディレクトリにあるものと、同じ名前のディレクトリにあるもの(例: "directory/FileWithHistory.cs"と "DiReCtOrY/FileWithMissingHistory.cs")があります。 Windowsでは、両方のファイルが同じディレクトリに配置され、問題が発生します。

+0

私の.hgignoreファイルにパターンがあり、hgがその中に「settings」という単語を持つプロジェクトファイルのいくつかを無視するような問題がありました。 – JulianDavid

2

奇妙な、実際には不可能な音。私がこの問題をデバッグしようとするのは、異なるリビジョンに更新し、最初に作業コピーに表示されるリビジョンを確認することです。これをバイナリ検索のやり方(bisect extensionの仕組みと似ています)で行うと、いくつかの更新後にファイルを紹介するリビジョンが見つかるはずです。

これで問題は解決しませんが、ソースを追跡するのに役立ちます。

関連する問題