
同じリポジトリの作業コピーを 2 台の異なるコンピューター (Mac) に持っています。問題となっているファイル ( としますSomeFile.m
) は、両方の作業コピーで r703 と表示され、ローカルの変更はありません。svn update SomeFile.m
両側で実行しても更新は行われず、リポジトリと完全に一致していると認識されます。
しかし、2 つのファイルは異なります。チェックサムが異なり、diff にはコードにとって重要な違いが表示されます。作業コピーの 1 つではファイルは正しいのですが、もう 1 つでは正しくありません。
まず、間違ったファイルをリポジトリ内のファイルに強制的に置き換えるにはどうすればよいでしょうか?
第二に、そもそもこのファイルはどのようにしてこの状態になったのでしょうか? 誤った競合解決などによりでしょうか?
答え1
1つのファイルバージョンが正しいが、リポジトリのバージョンが間違っていると思われる場合は、変更されていないファイルを Subversion に強制的にコミットさせるにはどうすればよいですか?
リポジトリからファイルを強制的に取得したい場合は、svn checkout コマンドを強制的に実行して現在のファイルを上書きする。
それ以外の場合は、ファイルの 1 つを変更し、それを新しいリビジョンとしてリポジトリに保存し、上記のように他のコンピューターで再度チェックアウトします。
答え2
特定のファイルのチェックアウト/更新を「強制的に」行う最も簡単な方法は、作業コピー内のそのファイルを削除することです - ファイルシステムの削除、ない svn-delete
- 作業コピーの更新を実行します。ファイルはリポジトリのバージョンで復元されます。
ファイルがこのような状態になった原因の 1 つは、気付かれないままローカルで変更が加えられたことです。SVN は競合を解決しないとファイルをコミットしないため、ファイルは更新されないままになります。