"Svn switch" удаляет локально добавленные файлы?
Мне нужно уточнить поведение "svn switch". Я использую SVN версии 1.6.5.
Из прочитанного руководства мое понимание поведения заключается в том, что локальные изменения будут сохранены. Поэтому я ожидал, что файл локального доступа все еще будет существовать в моем рабочем каталоге после svn switch
.
Однако, мои коллеги и я видели несколько случаев, когда новые файлы удаляются коммутатором. К сожалению, мы не можем понять, как воспроизвести это.
Есть ли какое-либо обстоятельство (либо функция, либо известная ошибка), при которой svn switch
удаляет локально добавленные файлы?
Ответы
Ответ 1
Я думаю, что это плохая идея переключиться, когда у вас есть незафиксированные изменения. Сначала скопируйте локальные изменения в ветку с помощью svn cp . <branch URL>
, а затем переключитесь. Могут быть очень сложные ситуации, в которые вы можете столкнуться.
Представьте себе, что в версии, к которой вы переходите, файлы, добавленные вами локально, уже существуют и совершенно разные. Или, если вы добавили целый каталог файлов, который не может быть надлежащим образом объединен с файлами в версии, к которой вы переключаетесь. Вы действительно хотите, чтобы один большой конфликт?
Состояние "S" показано svn status
, что означает, что разные части исходного дерева имеют разные версии. Это происходит именно тогда, когда SVN путают локальные изменения во время переключения. Он просто сломается в середине переключателя, а затем боль в шее восстанавливается. Случилось со мной несколько раз. Поэтому я всегда убеждаюсь, что моя рабочая копия не имеет локальных модификаций, прежде чем я запустил svn sw
.
Ответ 2
Он не должен удалять файлы с локальным добавлением или файлы без вершин. Редкие случаи - это когда каталог перемещается или удаляется коммутатором, но в этом случае должен быть конфликт дерева.
То, что я часто делаю, если я думаю, что могут быть конфликты деревьев, - это сохранить патч моих текущих изменений. Тогда я знаю, что смогу уничтожить свою рабочую копию и приступить к работе, если это необходимо, без потери работы.
svn diff > ../somewhere/safe/save.diff
# Break stuff
patch -p0 < ../somewhere/safe/save.diff
Ответ 3
Поведение svn switch
очень похоже на svn update
: если целью коммутатора является путь, в котором отсутствует какой-либо файл относительно рабочей копии, эти файлы будут удалены из рабочей копии.
Как сказал Иван, вы должны зафиксировать свои изменения и затем переключиться.