Откат неудачных изменений с помощью 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 > Объединить

В окне слияния выберите изменения, которые вы хотите вернуть, как обычно, но также включите флажок "Свернутое слияние".

Объединить как обычно.

Ответ 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 (путем проверки опции блокировки)

Он работает.

Надеюсь, это поможет кому-то.