How to rename a file using svn?

后端 未结 5 2104
-上瘾入骨i
-上瘾入骨i 2020-12-12 20:02

When I try svn mv old_file_name new_file_name, I get

 svn: Path \'new_file_name\' is not a directory

What\'s the correct way?

5条回答
  •  情深已故
    2020-12-12 20:39

    The behaviour differs depending on whether the target file name already exists or not. It's usually a safety mechanism, and there are at least 3 different cases:

    Target file does not exist:

    In this case svn mv should work as follows:

    $ svn mv old_file_name new_file_name
    A         new_file_name
    D         old_file_name
    $ svn stat
    A  +    new_file_name
            > moved from old_file_name
    D       old_file_name
            > moved to new_file_name
    $ svn commit
    Adding     new_file_name
    Deleting   old_file_name
    Committing transaction...
    

    Target file already exists in repository:

    In this case, the target file needs to be removed explicitly, before the source file can be renamed. This can be done in the same transaction as follows:

    $ svn mv old_file_name new_file_name 
    svn: E155010: Path 'new_file_name' is not a directory
    $ svn rm new_file_name 
    D         new_file_name
    $ svn mv old_file_name new_file_name 
    A         new_file_name
    D         old_file_name
    $ svn stat
    R  +    new_file_name
            > moved from old_file_name
    D       old_file_name
            > moved to new_file_name
    $ svn commit
    Replacing      new_file_name
    Deleting       old_file_name
    Committing transaction...
    

    In the output of svn stat, the R indicates that the file has been replaced, and that the file has a history.

    Target file already exists locally (unversioned):

    In this case, the content of the local file would be lost. If that's okay, then the file can be removed locally before renaming the existing file.

    $ svn mv old_file_name new_file_name 
    svn: E155010: Path 'new_file_name' is not a directory
    $ rm new_file_name 
    $ svn mv old_file_name new_file_name 
    A         new_file_name
    D         old_file_name
    $ svn stat
    A  +    new_file_name
            > moved from old_file_name
    D       old_file_name
            > moved to new_file_name
    $ svn commit
    Adding         new_file_name
    Deleting       old_file_name
    Committing transaction...
    

提交回复
热议问题