Як «відновити» видалену папку в Subversion / TortoiseSVN?


96

Ми випадково видалили папку "теги" з нашого сховища Subversion, де ми мали намір видалити лише один конкретний тег. Який найпростіший спосіб повернути папку "теги"?

Ми використовуємо TortoiseSVN як нашого клієнта, і я думав, що коли я перейду до браузера репо і покажу журнал, буде щось на зразок "скасувати зміни з цієї версії", подібно до того, що ви можете побачити в подібному діалоговому вікні на вашій робочій копії. Але такої команди там немає ...

Відповіді:


115

Просто скопіюйте видалену папку назад із попередньої версії.

У браузері сховищ натисніть кнопку з позначкою HEAD (у верхньому правому куті), щоб показати редакції, що ваша папка все ще існує, потім клацніть правою кнопкою миші та виберіть «Копіювати в ...» і введіть туди шлях хочуть, щоб папку було створено заново (можливо, той самий шлях, який уже є в текстовому полі).


4
Чудова порада, дякую. Одна помилка TortoiseSVN - у цьому діалоговому вікні "скопіювати в ..." мені довелося змінити шлях із "example.com/svn/tags" на "tags1", а потім знову, щоб кнопка OK увімкнулася.
Борек Бернард

2
Це може бути добре для тегів, але не слід робити, щоб відновити будь-яку іншу папку, оскільки ви втратите історію
slckin

3
Він зберігає історію, він також це зробив.
acdcjunior

просто не забудьте зняти прапорець біля пункту «Зупинити на копіюванні / перейменуванні» під час перегляду журналу, бо інакше TortoiseSVN не відображатиме історію до вашої дії відновлення (очевидно) ...
Олі

Це повністю спрацювало. Врятував багато свого часу. Дякую :)
dgupta3091

78

для любителів командного рядка:

  • спочатку знайдіть номер редакції, де відбулося ваше видалення:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

скажімо, ви виявили, що каталог був видалений у редакції 999 (до речі: можливо, вам буде простіше знайти номер редакції за допомогою браузера svn repo)

  • скопіювати папку з версії мінус 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

вуаля ти закінчив!

у вашому випадку це може бути:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"

1
Дякую..заощадили багато часу
Dharani Kumar

Це просто врятувало моє бекон!
аксіопісти

Просто хотів підтвердити, що підхід "svn copy" насправді зберігає всю історію, а для папок він працює рекурсивно, відновлюючи папку та всі дочірні дані.
WallStProg

11

Більшість з цих відповідей будуть працювати в певній мірі, але правильною є відповідь Даніеля. Зробіть зворотне злиття. Таким чином ви зберігаєте історію версій.

svn merge -r R1:R2

де R1 - версія, у якій ви перебуваєте, а R2 - версія, що містить видалений файл / папку.


1
При зворотному об'єднанні R1 повинен бути ревізією, яку ви хочете скасувати, а R2 - ревізією до цього.
Арлеслі

2
Ви не втрачаєте жодної історії svn copy.
maxschlepzig

Для тих з нас, хто не є ентузіастами командного рядка, див .: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Паскаль

2
Хіба це не відновить усі видалені файли / папки? Чи це спрацює, якщо я хочу відновити лише одну певну видалену папку, але не інші видалені папки?
ОВ7,

8

Вам потрібно буде зробити зворотне злиття .

Для отримання детальної інформації про те, як це зробити (і майже про все інше, що ви коли-небудь захочете або потребуєте зробити із SVN), офіційна книга доступна в Інтернеті .


3

Випливає з відповіді Рауді, яка працювала на мене після цього перегляду.

Деяким клієнтам svn може знадобитися номер редакції, вказаний за допомогою параметра -r revision, замість того, щоб використовувати @ після папки наступним чином:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"

Якщо ви відновляєтесь із папки, яка все ще існує, то вона -r <revision>буде працювати. Однак якщо ви намагаєтесь відновити папку безпосередньо, вам потрібно буде скористатися @<revision>. Інакше він скаже, що файл не знайдено.
arleslie

2

Перейдіть Repository Browserдо вашого repository, клацніть правою кнопкою миші на батьківській папці, де існувала ваша видалена папка . Тепер, Show Logз батьківської папки, виберіть попередню редакцію, де ви здійснили операцію видалення. У вас з'явиться список і натисніть папку правою кнопкою миші на інформацію про версію та виберіть Update to this Revision.

Ви закінчили


О, я бачу, це було не в діалоговому вікні Show Log, а в головному вікні браузера repo. Тим не менш, ця команда намагатиметься оновити свою локальну робочу копію, тоді як я хотів би вирішити цю проблему безпосередньо на сервері (ви можете уявити, що перевірка сотень тегів, кожен з яких містить тисячі файлів, не є точно тим, що мені хотілося б робити).
Борек Бернар

У мене це спрацювало. Параметр контекстного меню (за правою клавішею миші) має значення "Відмінити зміни з цієї редакції", і це призведе до зворотного злиття змін.
hsg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.