Откат неудачных изменений с помощью svn в Eclipse
Скажем, я сделал некоторые плохие изменения в репозитории Subversion. Затем я совершаю хорошие изменения, которые я хочу сохранить.
Что было бы самым простым способом отбросить эти плохие изменения в Eclipse и сохранить хорошие изменения? Предполагая, что файлы, относящиеся к плохим изменениям, не такие, как файлы, относящиеся к хорошим изменениям. Как все изменится, если в одни и те же файлы были внесены плохие изменения?
В основном я ищу способ сделать это через плагины Eclipse (Subclipse или Subversive), но также интересны команды командной строки.
Ответы
Ответ 1
У вас есть два варианта сделать это.
"Quick and Dirty" выбирает ваши файлы (используя ctrl) в представлении Project Explorer, щелкните их правой кнопкой мыши, выберите Replace with...
, а затем вы выберите лучший вариант для вас: от Latest from Repository
или некоторых Branch
версия. После того, как вы получите эти файлы, вы их модифицируете (с пробелом или исправить что-то, ваш звонок и зафиксируйте их для создания новой версии.
Более чистый способ - выбрать Merge
в меню команды и перейти через мастер, который поможет вам восстановить старую версию в реальной версии.
Обе команды имеют свои эквиваленты в командной строке: svn revert
и svn merge
.
Ответ 2
В Eclipse Ganymede (Subclipse)
Выберите проект/файл, который содержит неправильные изменения, а во всплывающем меню выберите:
Команда → Показать историю
Изменения, связанные с этим проектом/файлом, будут показаны на вкладке "История".
Найдите версию, в которой были сделаны "плохие изменения", и из всплывающего меню выберите:
Отменить изменения из версии X
Это объединит изменения в файлах, модифицированных в пределах плохой ревизии, с изменением до плохой ревизии.
Здесь есть два сценария:
-
Если вы не внесли никаких изменений для этого файла (плохая ревизия является последней ревизией для этого файла), он просто удалит изменения, сделанные при плохом пересмотре. Эти изменения объединены с вашей рабочей копией, поэтому вы должны их зафиксировать.
-
Если вы совершили некоторые изменения для этого файла (плохая ревизия не является последней ревизией для этого файла), вам придется вручную разрешить конфликт. Скажем, что у вас есть файл readme.txt с, а номер плохой версии - 33. Также вы сделали еще одну фиксацию для этого файла в редакции 34. После выбора Отменить изменения из версии 33 вы будете в вашей рабочей копии:
readme.txt.merge-left.r33 - плохая ревизия
readme.txt.merge-right.r32 - перед плохой ревизией
readme.txt.working - рабочая версия (такая же, как в r34, если у вас нет каких-либо незафиксированных изменений)
Исходный файл readme.txt будет помечен как конфликтующий и будет содержать объединенную версию (где изменения из плохой версии удаляются) с некоторыми маркерами (< < < < <.working и т.д.). Если вы просто хотите удалить изменения из плохой версии и сохранить изменения после этого, то все, что вам нужно сделать, это удалить маркеры. В противном случае вы можете скопировать содержимое из одного из трех файлов, упомянутых выше, в исходный файл. Что бы вы ни выбрали, когда вы закончите, отметьте конфликт, разрешенный
Команда - Отремонтировано Mark
Временные файлы будут удалены, и ваш файл будет помечен как измененный. Как и в 1, вы должны зафиксировать изменения.
Обратите внимание, что это не удаляет ревизию из истории изменений в svn-репозитории. Вы просто внесли новую ревизию, в которой удалены изменения от плохой ревизии.
Ответ 3
Если вы хотите сделать 1 файл за раз, вы можете перейти в представление "История" для файла, предполагая, что у вас установлен плагин Eclipse SVN. "Команда- > Показать историю"
В окне "История" найдите последнюю хорошую версию этого файла, щелкните правой кнопкой мыши и выберите "Получить содержимое". Это заменит вашу текущую версию содержимым этой версии. Затем вы можете зафиксировать изменения, когда все исправлено.
Ответ 4
В Eclipse с использованием Subversive:
Щелкните правой кнопкой мыши свой проект > Командa > Объединить
В окне слияния выберите изменения, которые вы хотите вернуть, как обычно, но также включите флажок "Свернутое слияние".
Объединить как обычно.
Ответ 5
Я написал пару сообщений в блогах по этому вопросу. Тот, который является субклипентным: http://markphip.blogspot.com/2007/01/how-to-undo-commit-in-subversion.html и тот, который является ориентированным на командную строку: http://blogs.collab.net/subversion/2007/07/second-chances/
Ответ 6
В svnbook есть раздел о том, как Subversion позволяет вам возвращать изменения из конкретной версии, не влияя на изменения, произошедшие в последующих версиях:
http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html#svn.branchmerge.commonuses.undo
Я не использую Eclipse много, но в TortoiseSVN вы можете сделать это из диалога журнала; просто щелкните правой кнопкой мыши на ревизии, которую вы хотите вернуть, и выберите "Отменить изменения из этой версии".
В случае, если файлы, для которых вы хотите вернуть "плохие изменения", имели "хорошие изменения" в последующих ревизиях, тогда процесс остается прежним. Изменения от "плохой" ревизии будут отменены, оставив изменения от "хороших" изменений нетронутыми, однако вы можете получить конфликты.
Ответ 7
У меня такая же проблема, но опция CleanUp eclipse не работает для меня.
1) установить TortoiseSVN
2) Перейдите в проводник Windows и щелкните правой кнопкой мыши на своем каталоге проектов
3 Выбор опции CleanUp (путем проверки опции блокировки)
Он работает.
Надеюсь, это поможет кому-то.