Откат плохих изменений с помощью SVN в Eclipse
Допустим, я допустил некоторые плохие изменения в хранилище Subversion. Тогда я совершаю хорошие изменения, которые хочу сохранить.
Что было бы самым простым способом откатить эти плохие изменения в Eclipse и сохранить хорошие изменения? Предполагая, что файлы, относящиеся к плохим изменениям, не совпадают с файлами, относящимися к хорошим изменениям. Как все изменится, если в те же файлы были внесены хорошие изменения, как и плохие?
В основном я ищу способ сделать это с помощью плагинов Eclipse (Subclipse или Subversive), но команды командной строки также интересны.
7 ответов
У вас есть два варианта сделать это.
Quick and Dirty выбирает ваши файлы (используя ctrl) в представлении Project Explorer, щелкните их правой кнопкой мыши и выберите Replace with...
а затем вы выбираете лучший вариант для вас, из Latest from Repository
, или несколько Branch
версия. После получения этих файлов вы изменяете их (с пробелами или исправляете что-то), вызываете их и фиксируете их для создания более новой ревизии.
Более чистый путь - это выбор Merge
в меню команды и перейдите к мастеру, который поможет вам восстановить старую версию в актуальном варианте.
Обе команды имеют свои эквиваленты командной строки: svn revert
а также svn merge
,
В Затмении Ганимед (Subclipse)
Выберите проект / файл, содержащий плохие изменения, и во всплывающем меню выберите:
Команда -> Показать историю
Изменения, связанные с этим проектом / файлом, будут отображаться на вкладке "История".
Найдите ревизию, в которой были зафиксированы "плохие изменения", и во всплывающем меню выберите:
Отменить изменения от ревизии X
Это объединит изменения в файле (файлах), измененных в пределах неверной ревизии, с ревизией до плохой ревизии.
Отсюда два сценария:
Если вы не зафиксировали никаких изменений для этого файла (плохая ревизия является последней ревизией для этого файла), он просто удалит изменения, внесенные в неверную ревизию. Эти изменения объединены с вашей рабочей копией, поэтому вы должны их зафиксировать.
Если вы зафиксировали некоторые изменения для этого файла (неверная ревизия не является последней ревизией для этого файла), вам придется вручную разрешить конфликт. Допустим, у вас есть файл readme.txt с неправильным номером ревизии 33. Кроме того, вы сделали еще одну фиксацию для этого файла в ревизии 34. После того, как вы выберете " Отменить изменения из ревизии 33", вы получите следующее в своей рабочей копии:
readme.txt.merge-left.r33 - плохая ревизия
readme.txt.merge-right.r32 - до плохой ревизии
readme.txt.working - версия рабочей копии (такая же, как в r34, если у вас нет незафиксированных изменений)
Исходный файл readme.txt будет помечен как конфликтующий и будет содержать объединенную версию (где удаляются изменения из неверной ревизии) с некоторыми маркерами (<<<<<<<.working и т. Д.). Если вы просто хотите удалить изменения из неверной ревизии и сохранить изменения, сделанные после этого, тогда все, что вам нужно сделать, это удалить маркеры. В противном случае вы можете скопировать содержимое одного из 3 файлов, указанных выше, в исходный файл. Что бы вы ни выбрали, когда вы закончите, пометьте конфликт, разрешенный
Команда - Марк решен
Временные файлы будут удалены, а ваш файл будет помечен как измененный. Как и в 1, вы должны совершить изменения.
Note that this does not remove revision from revision history in svn repository. You simply made new revision where changes from bad revision are removed.
Если вы хотите сделать по 1 файлу за раз, вы можете перейти к представлению "Журнал" для этого файла, если у вас установлен плагин Eclipse SVN. "Team->Show History"
В представлении "История" найдите последнюю хорошую версию этого файла, щелкните правой кнопкой мыши и выберите "Получить содержимое". Это заменит вашу текущую версию содержимым этой версии. Затем вы можете зафиксировать изменения, когда все исправите.
В Eclipse с использованием Subversive:
Щелкните правой кнопкой мыши ваш проект> Команда> Объединить
В окне слияния выберите ревизии, которые вы хотите вернуть как обычно, но также включите флажок "Обратное слияние".
Сливай как обычно.
Я написал пару постов в блоге на эту тему. Тот, который ориентирован на Subclipse: http://markphip.blogspot.com/2007/01/how-to-undo-commit-in-subversion.html и тот, который ориентирован на командную строку: http: //blogs.collab. сеть / диверсии / 2007/07 / второй шанс /
В svnbook есть раздел о том, как Subversion позволяет вам отменить изменения от определенной ревизии, не затрагивая изменения, которые произошли в последующих ревизиях:
http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html
Я не часто использую Eclipse, но в TortoiseSVN вы можете сделать это из диалога журнала; просто щелкните правой кнопкой мыши ревизию, которую вы хотите отменить, и выберите "Отменить изменения из этой ревизии".
В случае, если файлы, для которых вы хотите отменить "плохие изменения", имели "хорошие изменения" в последующих ревизиях, то процесс такой же. Изменения в "плохой" ревизии будут отменены, оставляя изменения "хороших" версий нетронутыми, однако вы можете столкнуться с конфликтами.
У меня та же проблема, но опция CleanUp eclipse не работает для меня.
1) установить TortoiseSVN
2) Зайдите в проводник Windows и щелкните правой кнопкой мыши на каталоге вашего проекта
3 Выбор варианта очистки (путем проверки блокировки блокировки)
Это работает.
Надеюсь, это кому-нибудь поможет.