Хотя я как-то разбираюсь в VCS (обычный пользователь svn, git и git-svn), я не могу обернуться вокруг этого странного поведения SVN.
Всякий раз, когда мне нужно переименовать каталог в моей рабочей копии SVN из иного «чистого» состояния - то есть svn status
ничего не возвращает, и все другие модификации были зафиксированы - например, так (что предлагает svn doc):
svn mv foo bar
svn commit
SVN громко жалуется:
Adding bar
Adding bar/toto
Deleting foo
svn: Commit failed (details follow):
svn: Item '/test/foo' is out of date
Как пожелаете:
svn update
Что дает:
C foo
At revision 46.
Summary of conflicts:
Tree conflicts: 1
Существует конфликт дерева, , в то время как сторонние изменения не произошли . Очевидно, что единственный способ выйти из этого беспорядка конфликта дерева - это вообще (из красной книги svn):
svn resolve --accept working -R .
svn commit
Дистанционное переименование в репозитории, а затем обновление моей рабочей копии выглядит довольно умственно:
url=$(svn info | grep -e '^URL:' | sed 's/^URL: //') svn mv $url/foo $url/bar
svn update
Есть ли санкционированный, более упорядоченный способ переименования папки, по которой я скучаю? Какова основная причина этого особенно удивительного состояния конфликта деревьев?