Допустим, я внес несколько плохих изменений в репозиторий Subversion. Затем я совершаю хорошие изменения, которые хочу сохранить.
Каким будет самый простой способ откатить эти плохие изменения в Eclipse и сохранить хорошие изменения? Предполагая, что файлы, относящиеся к плохим изменениям, не совпадают с файлами, относящимися к хорошим изменениям. Как все изменится, если хорошие изменения были внесены в те же файлы, что и плохие?
Я в основном ищу способ сделать это через плагины Eclipse (Subclipse или Subversive), но команды командной строки также интересны.





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