While somehow versed in VCS (regular svn, git and git-svn user) I can't seem to wrap my head around this peculiar SVN behavior.
Whenever I need to rename a directory in my SVN working copy from an otherwise 'clean' state - i.e svn status
returns nothing and all other modifications have been commited - like so (which is what the svn doc suggests):
svn mv foo bar svn commit
SVN complains loudly:
Adding bar Adding bar/toto Deleting foo svn: Commit failed (details follow): svn: Item '/test/foo' is out of date
As you wish:
svn update
Which gives:
C foo At revision 46. Summary of conflicts: Tree conflicts: 1
There's a tree conflict, while no third-party change happened. Obviously, the only way to get out of this tree conflict mess is generically (from the svn red book):
svn resolve --accept working -R . svn commit
Renaming it remotely on the repo then updating my working copy seems quite braindead:
url=$(svn info | grep -e '^URL:' | sed 's/^URL: //') svn mv $url/foo $url/bar svn update
Is there a sanctioned, more streamlined way to rename a folder that I'm missing? What is the root cause behind that particularly surprising tree conflict state?
You rename a directory by moving it to a different name. Use the mv command to rename directories. You can also use mv to move a directory to a location within another directory. In this example, the directory carrots is moved from veggies to veggies2 with the mv command.
Renaming a file. Normally you can just use SVN Rename on the context menu. This is analogous to the Move command described in the Moving or Copying a file recipe. It is almost as if you are doing two separate steps: an Add operation with the new name and a Delete operation of the old name.
A Subversion working copy is your own private working area, which looks like any other ordinary directory on your system. It contains a COPY of those files which you will have been editing on the website. You can edit these files however you wish, in the usual way.
svn mv
works for me:
C:\svn\co>svn mv my_dir new_dir A new_dir D my_dir\New Text Document.txt D my_dir C:\svn\co>svn commit -m foo Raderar my_dir Lägger till new_dir Arkiverade revision 2. C:\svn\co>
Sorry for the Swedish output of svn.
There must be something else that is wrong in your case.
Edit:
As pointed out in the comments by Lloeki
To reproduce the behavior you also need to update and commit a file contained in the folder, but not update the folder itself.
file commit creates a new rev n on the repo, but local metadata is not updated (as it has always be, see svn log after any commit) , thus dir metadata is at rev n-1. It follows that svn won't commit because of the metadata diff, and it won't update because there's indeed a conflict on the dir: update metadata vs delete.
The behavior is "expected" and the "solution" is to update the working copy before issuing the svn rename
command.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With