Как мне вернуться к более старой версии нашего кода в Subversion? - PullRequest
464 голосов
/ 02 мая 2009

Я работаю над проектом с другом и хочу вернуться к более старой версии нашего кода и установить его в качестве текущей. Как мне это сделать?

Я использую "anksvn" на vs08.

У меня есть версия, которую я хочу на моем ПК, но фиксация не удалась; Я получаю сообщение "ошибка фиксации, файл или каталог устарели."

У меня также есть клиент Subversion на моем компьютере.

Ответы [ 14 ]

0 голосов
/ 12 апреля 2019

На этой странице много опасных ответов. Обратите внимание, что начиная с версии 1.6 SVN, обновление -r может вызвать конфликты деревьев, которые быстро перерастают в потенциально кошмарные потери данных, когда вы ищете информацию о конфликтах деревьев.

Правильный способ вернуться к версии:

svn merge -r HEAD:12345 .

Где 12345 - номер версии. Не забывайте точку.

0 голосов
/ 23 мая 2018

Ответ Джона Скита в значительной степени является решением в двух словах, однако, если вы похожи на меня, вам может потребоваться объяснение. Руководство Subversion называет это

Cherry-Pick Merge

Из справочных страниц.

  1. Эта форма называется слиянием "вишня": '-r N: M' относится к разнице в истории ветвь источника между ревизиями N и M.

    Для отмены изменений можно использовать «обратный диапазон». Например, когда источник и цель ссылаются на одну и ту же ветку, ранее зафиксированную пересмотр может быть отменен. В обратном диапазоне N больше, чем M в '-r N: M' или опция '-c' используется с отрицательным числом: '-c -M' эквивалентно '-r M:'. Отмена таких изменений также известна как выполнение «обратного слияния».


  • Если источником является файл, то к нему применяются различия файл (полезно для обратного слияния предыдущих изменений). Иначе, если источником является каталог, то по умолчанию целью является '.'.

    При обычном использовании рабочая копия должна быть актуальной, за один раз ревизия, без локальных изменений и без переключаемых поддеревьев.

* 1 028 * Пример:
svn merge -r 2983:289 path/to/file

Это заменит локальную копию [2983] (которая, согласно приведенной выше цитате, должна синхронизироваться с сервером - ваша ответственность) с версией 289 с сервера. Изменение происходит локально, что означает, что если у вас есть чистая проверка, то изменения могут быть проверены перед их фиксацией.

0 голосов
/ 24 марта 2014

У меня сработало следующее.

У меня было много локальных изменений, и мне нужно было отменить их в локальной копии и получить последнюю стабильную версию в SVN.

  1. Проверка состояния всех файлов, включая игнорируемые файлы.

  2. Grep все строки, чтобы получить новые добавленные и проигнорированные файлы.

  3. Заменить их на //.

  4. и rm -rf все строки.

    svn status --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"

0 голосов
/ 02 мая 2009

Синхронизируйте со старой версией и передайте ее. Это должно сработать.

Вот также объяснение отмены изменений.

...