Как мне вернуть репозиторий Subversion, а не мою рабочую копию, к определенной ревизии? - PullRequest
4 голосов
/ 27 июня 2010

Я относительно новичок в Subversion, пришедший из Source Safe, и это сводит меня с ума.Используя интерфейс Tortoise, Commit продолжал показывать мне файлы .java в моем каталоге bin, которые, как он сказал, были «пропущены» - хорошо, это отдельный вопрос.По сути, когда я попытался несколько вещей, чтобы избавиться от ложного сообщения «bin», Tortoise вместо этого удалил весь мой исходный каталог.Я попытался добавить что-то новое, но когда я добавил, оно пришло как новое, без истории.

Как мне вернуть Subversion к определенной ревизии?Как будто я никогда не бывал?Я знаю, как это сделать в VSS, но каждый раз, когда я пытаюсь использовать TortoiseSVN, он просто изменяет мою рабочую копию.Я не хочу потом проверять мою рабочую копию, потому что это потеряло бы меня всю мою историю.Может ли Subversion забыть?

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

Ответы [ 3 ]

7 голосов
/ 27 июня 2010

Subversion не забудет, но вы можете сделать что-то вроде следующего:

Допустим, ваша текущая ревизия равна 100, и вы хотите вернуться к ревизии 70. Вы будете создавать ревизию 101, что точно так же, как 70.

1) Проверьте хорошую чистую рабочую копию.

2) Слияние (назад) изменений.

svn merge -r100:70 http://repo.com/my/project/trunk

3)Проверьте здравомыслие.Ваша рабочая копия именно то, что вы хотели?Если так:

svn commit -m "rolled back to the good old days of r70 "

4 голосов
/ 28 июня 2010

Поскольку вы специально спросили о TortoiseSVN, вы можете сделать следующее:

  • щелкните правой кнопкой мыши в вашем рабочем каталоге
  • TortoiseSVN
  • Обновление до ревизии
  • Нажмите на журнал
  • Выберите нужную ревизию (это поместит номер ревизии в поле Ревизия - если вы уже знаете номер ревизии, вы можете просто ввести его сразу).
  • Нажмите ок

Затем просто внесите свои изменения в хранилище с соответствующим сообщением.

2 голосов
/ 27 июня 2010

Вы не забираете SVN;вы берете свою рабочую копию обратно, а затем фиксируете ее.

РЕДАКТИРОВАТЬ: в зависимости от того, какая команда (IE, svn cp вместо cp), subversion запомнит происхождение (историю) файла.

Вы можете либо слить его обратно, либо скопировать.Копирование, вероятно, лучший выбор для этого.

Если бы я собирался это сделать, я бы сделал:

svn update
svn rm directory
svn ci -m "temporarily removed the content"
svn cp -r [revision] directory ./directory
svn ci -m "copied revision [revision] to current"

Однако, возможно, лучший способ сделать это будет:

svn update
svn merge -r HEAD:[revision] directory directory
svn ci -m "reverted back to [revision]"

В некоторых местах, где я помещаю «каталог», вам, возможно, придется использовать URL-адрес местоположения в хранилище, например, если вы только что удалили корневой каталог (и, таким образом, ничего не осталосьссылаться на)Либо это, либо слияние, первым является URL-адрес репо, а вторым - локальный каталог ... хотя он, вероятно, будет работать только с использованием локального каталога дважды.

Просто запомните;если он не работал должным образом, не регистрируйте его: D (это преимущество при использовании второго метода ... также, это требует меньше передачи данных)

...