Восстановите папку или файл в TortoiseSVN, сохранив при этом всю историю - PullRequest
1 голос
/ 19 мая 2010

В версии 1 папка существовала. В ревизии 2 папка была случайно удалена, а изменение зафиксировано.

Мы хотим откатиться так, чтобы папка присутствовала, и сохранить ее историю.

В документах TortoiseSVN указано «как» в разделе «Возвращение удаленного файла или папки».

Цитировать:

Возвращение удаленного файла или папки

Если вы удалили файл или папку и уже зафиксировали эту операцию удаления в хранилище, то обычное TortoiseSVN -> Revert больше не сможет вернуть его обратно. Но файл или папка не теряются вообще. Если вы знаете, что ревизия была удалена из файла или папки (если вы этого не делаете, используйте диалог журнала, чтобы выяснить это), откройте браузер хранилища и переключитесь на эту ревизию. Затем выберите файл или папку, которые вы удалили, щелкните правой кнопкой мыши и выберите [Контекстное меню] -> [Копировать в ...]. В качестве цели для этой операции копирования выберите путь к вашей рабочей копии.

Переключатель извлекает файл в мою рабочую копию, как и следовало ожидать, однако в контекстном меню нет опции «Копировать в», когда я щелкаю правой кнопкой мыши эту рабочую копию. Если я открою браузер репозитория, появится опция copy to to, но, похоже, для этого просто потребуется копия файла.

Решение, которое я чувствую, состоит в том, чтобы сделать Branch / Tag, но если я попробую это из предыдущей ревизии по тому же пути в хранилище, SVN выдаст ошибку, что путь уже существует.

Поэтому, как мне восстановить папку / файл в TortoiseSVN, сохраняя при этом всю историю.

TortoiseSVN v1.6.8, сборка 19260 - 32-разрядная, Subversion 1.6.11,

Ответы [ 4 ]

6 голосов
/ 19 мая 2010

Выполнить «обратное слияние»:

  1. Убедитесь, что ваша рабочая копия обновлена ​​до HEAD и полностью очищена (не обязательно, но всегда хорошая идея перед попыткой слияния)
  2. Щелкните правой кнопкой мыши по папке и выберите TortoiseSVN> Объединить ...
  3. Выберите «Объединить диапазон ревизий» и нажмите «Далее»
  4. URL для слияния - это путь репо для вашего текущего каталога (т. Е. Тот, который содержит удаленный файл)
  5. Диапазон ревизии для слияния - это ревизия, в которой вы удалили файл (здесь может помочь show log)
  6. Обязательно выберите «Обратное слияние»
  7. Хит "Далее"
  8. Все параметры объединения по умолчанию должны быть достаточными, поэтому нажмите «Объединить»

Теперь файл должен быть добавлен и сохранен весь его предыдущий журнал.

Пояснение:

Это «откатывает» ревизию, содержащую удаление, но добавляет информацию о слиянии в свойства каталога. SVN может отслеживать исходный файл через эти метаданные. В командной строке вы должны выполнить обратное слияние ревизии, в которой вы ее удалили:

svn merge -c -<revision-number> path/containing/file

Обратите внимание на дефис перед числом оборотов (т. Е. «Отрицательный» номер ревизии).

1 голос
/ 19 мая 2010

То, что вы описываете с «Копировать в», только в Repo-Browser, является правильным Именно так вы должны восстановить свой файл. С другой стороны, что не так с копированием?

1 голос
/ 19 мая 2010

«Копировать в» в браузере хранилища является правильным. Я думаю, что вы пропустили тот факт, что это svn-копия, которая хранит информацию истории. Именно то, что вы просили.

0 голосов
/ 19 мая 2010

Я думаю, что вы можете использовать опцию «Branch / Tag ...» в контекстном меню, чтобы сделать это, указав только конкретную ревизию в качестве источника и транк в качестве места назначения.

AFAIK, этоэквивалент командной строки svn copy.

Вы также можете использовать svn copy из командной строки ...

...