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