63
votes

I have a problem that seems very simple but is hard to solve. I get the mentioned error after deleting a directory. I did not find a solution yet to solve the conflict. This is how it occurs:

svn add dir
svn add dir/file1
svn commit
svn add dir/file2
svn commit
svn delete dir
svn commit
--> commit failed  
--> Directory '/dir' is out of date

The obvious solution 'svn update'does not work. After svn update a next commit fails with:

Commit failed
Directory '/dir' remains in conflict.

In the meanwhile I found a solution but it is a bit cumbersome:

svn resolve --accept working dir
svn commit --> still fails
svn update
svn commit --> still fails
svn resolve --accept working dir
svn commit --> NO PROBLEM!

Two questions: - can anyone explain this behaviour because I am very curious about it - this problem occurs in a perl script in a far more complex situation. Can anyone give me a simple solution with is 'doable' in the perl script?

10

10 Answers

99
votes

Just make a svn update and then your commit should work.

64
votes

If I understand subversion correctly, the problem is this:

Subversion tracks the current revision for each file and directory separately. Whenever a change on a file is committed, the revision of the parent directory changes in the repo, but you working copy still has the directory in its old revision.

So in your scenario after adding the file the parent directory in the repo has a higher revision than your working copy. When you try to delete the directory you working on an outdated version.

To resolve:

Do an svn update after adding the file, but before deleting the dir.

In general if you do not want to pull in anybody else's changes, you can restrict the update to the directory itself: svn up --depth empty dir.

4
votes

Make update, cleanup and then commit.

4
votes

I've figured out an easy way to solve the problem on Eclipse:

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

and then follow the same way for commiting.

Right click on your project -> Team -> Commit
1
votes

You just need to update and then commit

1
votes

Have you tried svn up dir before doing the final commit?

0
votes

To get around this problem I used 'svn revert ' then do the commit again, which should get rid of the contents in the then do 'svn delete ' and commit again. I got this problem trying to rename a directory but hopefully this will work.

0
votes

Similar problem I faced with fresh workspace:

$ 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

To resolve the issue I re-updated the sources and used 'delete URL' command:

$ svn delete --force https://server/path.../dir
$ svn update
0
votes

This happens when you are going to commit a file and the same file is updated in the SVN as well. Then it is going to conflict.So what you have to do is just take a copy of your changes and revert the file. then again paste your code. Then you can commit without any issues.

0
votes

Try committing one test directory on the server. generally when you delete any repository from SVN and if contains multiple files, SVN note the changes but it's in on-hold state or changes will take time to reflect. No worries just wait for few minutes and it will start reflecting. try committing test directory. cheers.