Renaming

Renaming is supported to varying degrees by different version control systems. The simplest approach is to not support renaming at all. In CVS this is done by having the path from root be part of a file's name. If two different people create the same file with the same name, the two versions are simply merged together. In CVS there's no coherent concept of directories. Directories can be created but not removed, and as a mostly workable hack when one updates with the -P option (which everybody does) then any empty directories get deleted. CVS also has the quirk that if one person deletes a file and another modifies it, then that's treated as a conflict (most other systems quietly merge to the file being deleted).

More functionality can be added by supporting file but not directory renames. In this case paths are still treated as part of a file's name, and directories only have implicit existence, but files have real identifiers and can be moved around. A new conflict case is added where two files are moved onto the same location. Directory moves are somewhat hackishly supporting by moving all the files under that directory, as a result of which if one person moves a directory and another person adds a file to it, the merge is to have the new file in the old place.

The most powerful approach is to support renaming both files and directories. A file has a name and a parent, which is the directory it immediately sits under, and the same properties apply to directories. This creates a whole slew of new conflict cases. For example, a file can be moved to a deleted directory, and two directories each can be moved to be the child of the other. Also, it's a not uncommon use case to want to import one project into another one as a subdirectory, so there's general agreement that it should be possible to rename the root directory as well, although no version control systems actually support that yet, mostly because it introduces a whole new bunch of edge cases. It's tempting to view name and parent as two separate properties, and allow one person changing name and the other changing parent to clean merge, but the general consensus is that that should be treated as a conflict.