12

私の質問は次のとおりです。ファイルが変更されていないのに、Mercurial が (「ステータス」または TortoiseHgWorkbench を介して) ファイルを「変更済み」と表示する原因は何ですか?

状況は次のとおりです。Linux マシンのローカルにリポジトリがあります。Linux マシンのリポジトリのみを使用します。ただし、Windows マシンにリポジトリ (および作業ファイル) の正確なコピーがあります (BeyondCompare を使用して、フラッシュ ドライブ経由で同期します)。私の記憶では、Mercurial は Windows マシンにインストールされていますが、Windows マシンで起動したことはありません。

最近、Linux マシンでコミットしたいと思っていましたが、表示されるとは思わなかった多くのファイルが「変更済み」としてリストされていました。作業ディレクトリのコピーがリポジトリ内の親と「バイナリ同一」であることを示す視覚的な差分を (BeyondCompare を使用して) 実行しました。TortoiseHgWorkbench は「変更された」ファイルを表示し、差分ウィンドウにはファイル全体が緑色で表示されます (あたかもリポジトリに空のファイルがあるかのように)。問題のファイルでは、ファイル システム上のファイルの日付は数か月前ですが、私の最後のコミット (変更されたすべてのファイルをコミット) は数週間前です。一部の変更されていないファイルは「変更済み」として表示されますが、一部はそうではありません。私は以前にこの動作を見たことがなかったので、少し混乱しています。

リポジトリで「hg verify」を実行しましたが、興味深いものは何もありませんでした。

作業ディレクトリ内のすべてのファイルが無傷であるため、大したことではないと思います。また、ファイルをコミットしたとしても (ファイルが変更されていなくても)、何かが損なわれるかどうかはわかりません。しかし、私は何が起こったのかを理解したいと思っています。

何を探すべきかについてのアイデアを前もって感謝します。

[編集]

根本的な原因 (ファイルのアクセス許可とアクセス日付は変更されていません) はまだ見つかりませんが、@barjak の応答は、私がこれを見つけた方向を示してくれました:なぜ「hg diff -g」では変更されたファイルが表示されないのですか? (片親) . 私の状況は、そこで説明されているものと同じです (hg diff と hg diff --git の両方は、実際に変更されたファイルのみを表示しますが、hg status は変更されていないファイルをいくつか表示します)。ところで、私はHg 2.6を使用しています。

[編集]

誰にとっても役立つ場合は、通常のリポジトリに戻った方法を次に示します。

シェルで:

cd src
hg diff --git > ../junk
grep "\-\-git" ../junk

tortoiseHgWorkbenchで

uncheck all files marked "M"
check all files indicated in the grep results above (i.e., have real diffs)
commit

シェルで:

hg revert --all

次に、作業ディレクトリをクリーンアップします( revert --all 生成されたいくつかの機能していないファイル。また、いくつかのファイルの日付をリセットします(このリポジトリを使用しているのは私だけであり、ファイルの日付は役に立ちます。はい、ファイルの日付を復元するための Hg 拡張機能がありますが、まだインストールしていません)。

このプロセスにより、すべてが再び整列しました。

4

2 に答える 2

12

Unix パーミッションが変更された場合も、ファイルが変更済みとしてマークされる可能性があります。hg diff -g権限を確認してみてください。

于 2013-10-03T21:53:36.197 に答える