Как переименовать файл с помощью svn?

когда я пытаюсь svn mv old_file_name new_file_name, Я

 svn: Path 'new_file_name' is not a directory

Как правильно? (извините, это кажется таким тривиальным, но я застрял).

PS. использование svn версии 1.6.11

редактировать кажется, я получаю эту ошибку, только если new_file_name - это имя файла, который в настоящее время находится под контролем версий. В этом случае, конечно, я могу просто

 mv old_file_name new_file_name
 svn delete old_file_name

5 ответов


поведение отличается в зависимости от того, существует ли имя целевого файла или нет. Это обычно механизм безопасности, и есть по крайней мере 3 разных случая:

целевой файл не exist:

в этом случае svn mv должен работать следующим образом:

$ 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...

целевой файл уже существует в репозитории:

в этом случае, целевой файл должен быть явно удален, прежде чем файл может быть переименован. Это может быть сделано в той же транзакции следующим образом:

$ 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...

производства svn stat, the R указывает, что файл был заменен, и что файл имеет свою историю.

целевой файл уже существует локально (обновляемая):

в этом случае содержание файла будет потеряно. Если это нормально, то файл можно удалить локально перед переименованием существующего файла.

$ 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...

использование TortoiseSVN легко работало на Windows для меня.

http://tortoisesvn.net/

щелкните правой кнопкой мыши файл - > меню TortoiseSVN - > РЕПО-браузер - > щелкните правой кнопкой мыши файл в репозитории - > переименовать - > нажмите Enter - > нажмите Ok

использование SVN 1.8.8 TortoiseSVN версии 1.8.5


это сообщение появится, если вы используете файловую систему без учета регистра (например, на Mac), и вы пытаетесь использовать имя (или другое изменение регистра). В этом случае вам нужно переименовать в третье, фиктивное, имя:

svn mv file-name file-name_
svn mv file-name_ FILE_Name
svn commit

это может быть, если вы создали новый каталог на диске перед его созданием / фиксацией в SVN. Все, что вам нужно, это просто создать его в SVN и сделать шаг после:

$ svn mv etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/
svn: E155010: Path '/home/dyr/svn/nagioscore/etc/nagios/hosts/us0101/ccs' is not a directory

$ svn status
?       etc/nagios/hosts/us0101/ccs

$ rm -rvf etc/nagios/hosts/us0101/ccs
removed directory 'etc/nagios/hosts/us0101/ccs'

$ svn mkdir etc/nagios/hosts/us0101/ccs
A         etc/nagios/hosts/us0101/ccs

$ svn move etc/nagios/hosts/us0101/cs/us0101ccs001.cfg etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
A         etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
D         etc/nagios/hosts/us0101/cs/us0101ccs001.cfg

$ svn status
A       etc/nagios/hosts/us0101/ccs
A  +    etc/nagios/hosts/us0101/ccs/us0101accs001.cfg
        > moved from etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
D       etc/nagios/hosts/us0101/cs/us0101ccs001.cfg
        > moved to etc/nagios/hosts/us0101/ccs/us0101accs001.cfg

вы можете сделать это, выполнив 3 шага:

 - svn rm old_file_name
 - svn add new_file_name
 - svn commit