2010-06-27 2 views
4

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

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

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

ответ

4

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

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

Тогда просто зафиксировать изменения в хранилище с соответствующим сообщением.

+0

Спасибо, у меня нет доступа к ящику репозитория прямо сейчас. – orbfish

+0

Когда я пытаюсь передать старую ревизию в багажник, я получаю сообщение об ошибке, сообщающее мне, что мне нужно сначала обновить его, что, конечно же, вернет его обратно в ревизию HEAD ... – Christian

+1

Мне нужно было войти в журнал, нажмите на интересующую вас ревизию, «Вернитесь к этой ревизии», а затем повторите фиксацию. «Обновление для пересмотра» не сработало для меня ... – Christian

2

Вы не берете СВН назад; вы возвращаете свою рабочую копию, а затем выполняете ее.

EDIT: в зависимости от того, какая команда (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]" 

Для некоторых из тех мест, где я put 'directory', вам, возможно, придется использовать URL-адрес местоположения в репозитории, например, если вы только что удалили корневой каталог (и, следовательно, ничего не осталось для ссылки). Либо это, либо слияние, первое - это URL-адрес репо, а второй - это локальный каталог ... хотя он, вероятно, будет работать только с использованием локального каталога дважды.

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

6

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 "