web-dev-qa-db-ja.com

SVNコミットに失敗しました:ディレクトリが最新ではありません

私は非常に単純に見えるが、解決が難しい問題を抱えています。ディレクトリを削除すると、上記のエラーが表示されます。紛争を解決するための解決策はまだ見つかりませんでした。これがどのように発生するかです:

 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スクリプトで「実行可能」な簡単な解決策を教えてもらえますか?

52
Jos Geerts

svn updateそして、コミットが機能するはずです。

77
khmarbaise

Subversionを正しく理解している場合、問題は次のとおりです。

Subversionは、各ファイルの現在のリビジョンとディレクトリを個別に追跡します。ファイルの変更がコミットされるたびに、レポジトリの親ディレクトリのリビジョンが変更されますが、作業コピーにはまだ古いリビジョンのディレクトリがあります。

したがって、ファイルを追加した後のシナリオでは、リポジトリ内の親ディレクトリのリビジョンが作業コピーよりも高くなります。古いバージョンで作業しているディレクトリを削除しようとすると。

解決する:

svn updateファイルを追加した後、ディレクトリを削除する前。

一般に、他の誰かの変更を取得したくない場合は、ディレクトリ自体への更新を制限できます:svn up --depth empty dir

58

更新を行い、クリーンアップしてからコミットします。

3
Arda Ç.

更新してからコミットするだけです

1
ULysses

やってみました svn up dir最後のコミットを行う前に?

1
TheJuice

Eclipseの問題を解決する簡単な方法を見つけました。

Right click on your project -> Team -> Update to HEAD

そして、同じ方法でコミットします。

Right click on your project -> Team -> Commit
0
Ercan Duman

これは、ファイルをコミットするときに発生し、同じファイルがSVNでも更新されます。その後、競合が発生するため、変更のコピーを取り、ファイルを元に戻すだけです。その後、再度コードを貼り付けます。その後、問題なくコミットできます。

0
chamzz.dot

私が新しいワークスペースで直面した同様の問題:

$ 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
0
Ruslan

この問題を回避するために、「svn revert」を使用してから再度コミットを実行します。これにより、「svn delete」の内容が削除され、再度コミットされます。ディレクトリの名前を変更しようとするとこの問題が発生しましたが、うまくいけばうまくいきます。

0
Mark