私は非常に単純に見えるが、解決が難しい問題を抱えています。ディレクトリを削除すると、上記のエラーが表示されます。紛争を解決するための解決策はまだ見つかりませんでした。これがどのように発生するかです:
svn add dir svn add dir/file1 svn commit svn add dir/file2 svn commit svn delete dir svn commit -> commit failed ->ディレクトリ '/ dir'が古くなっています
明らかなソリューション「svn update」は機能しません。 svn updateの後、次のコミットは失敗します:
コミットに失敗しました ディレクトリ '/ dir'は競合状態のままです。
その間に解決策を見つけましたが、少し面倒です:
svn resolve --accept working dir svn commit->それでも失敗します svn update svn commit->まだ失敗します svn resolve -作業ディレクトリを受け入れます svn commit->問題なし!
2つの質問:-私は非常に興味があるので、誰でもこの動作を説明できますか?-この問題は、より複雑な状況のPerlスクリプトで発生します。 Perlスクリプトで「実行可能」な簡単な解決策を教えてもらえますか?
svn update
そして、コミットが機能するはずです。
Subversionを正しく理解している場合、問題は次のとおりです。
Subversionは、各ファイルの現在のリビジョンとディレクトリを個別に追跡します。ファイルの変更がコミットされるたびに、レポジトリの親ディレクトリのリビジョンが変更されますが、作業コピーにはまだ古いリビジョンのディレクトリがあります。
したがって、ファイルを追加した後のシナリオでは、リポジトリ内の親ディレクトリのリビジョンが作業コピーよりも高くなります。古いバージョンで作業しているディレクトリを削除しようとすると。
解決する:
svn update
ファイルを追加した後、ディレクトリを削除する前。
一般に、他の誰かの変更を取得したくない場合は、ディレクトリ自体への更新を制限できます:svn up --depth empty dir
。
更新を行い、クリーンアップしてからコミットします。
更新してからコミットするだけです
やってみました svn up dir
最後のコミットを行う前に?
Eclipseの問題を解決する簡単な方法を見つけました。
Right click on your project -> Team -> Update to HEAD
そして、同じ方法でコミットします。
Right click on your project -> Team -> Commit
これは、ファイルをコミットするときに発生し、同じファイルがSVNでも更新されます。その後、競合が発生するため、変更のコピーを取り、ファイルを元に戻すだけです。その後、再度コードを貼り付けます。その後、問題なくコミットできます。
私が新しいワークスペースで直面した同様の問題:
$ svn delete dir/file
D dir/file
$ svn ci -m "comment1"
Deleting dir/file
$ svn delete dir/
D dir
$ svn ci -m "comment2"
Deleting dir
svn: Commit failed (details follow):
svn: Item 'dir' is out of date
この問題を解決するには、ソースを再更新し、「URLの削除」コマンドを使用しました。
$ svn delete --force https://server/path.../dir
$ svn update
この問題を回避するために、「svn revert」を使用してから再度コミットを実行します。これにより、「svn delete」の内容が削除され、再度コミットされます。ディレクトリの名前を変更しようとするとこの問題が発生しましたが、うまくいけばうまくいきます。