Как переименовать файл с помощью 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 для меня.
щелкните правой кнопкой мыши файл - > меню 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