Пока как-то разбирается в VCS (обычные svn, git и git -svn пользователь), я не могу показаться, что обволакивает это своеобразное поведение SVN.
Всякий раз, когда мне нужно переименовать каталог в моей рабочей копии SVN из другого "чистого" состояния, т.е. svn status
ничего не возвращает и все другие изменения были совершены - вот так (что и предлагает документ svn):
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 red book):
svn resolve --accept working -R .
svn commit
Переименовать его удаленно на репо, а затем обновить мою рабочую копию, похоже, довольно странно:
url=$(svn info | grep -e '^URL:' | sed 's/^URL: //') svn mv $url/foo $url/bar
svn update
Есть ли санкционированный, более упорядоченный способ переименования папки, которую мне не хватает? Какова основная причина этого особенно удивительного состояния конфликта деревьев?