Подтвердить что ты не робот

"Svn switch" удаляет локально добавленные файлы?

Мне нужно уточнить поведение "svn switch". Я использую SVN версии 1.6.5.

Из прочитанного руководства мое понимание поведения заключается в том, что локальные изменения будут сохранены. Поэтому я ожидал, что файл локального доступа все еще будет существовать в моем рабочем каталоге после svn switch.

Однако, мои коллеги и я видели несколько случаев, когда новые файлы удаляются коммутатором. К сожалению, мы не можем понять, как воспроизвести это.

Есть ли какое-либо обстоятельство (либо функция, либо известная ошибка), при которой svn switch удаляет локально добавленные файлы?

4b9b3361

Ответ 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: если целью коммутатора является путь, в котором отсутствует какой-либо файл относительно рабочей копии, эти файлы будут удалены из рабочей копии.

Как сказал Иван, вы должны зафиксировать свои изменения и затем переключиться.