SVN скасувати видалення перед фіксацією


135

Якщо ви видалите каталог з робочої копії SVN, але ще не ввели його, невідомо, як його повернути. Google навіть пропонує "svn скасувати видалення перед фіксацією" як загальний запит, коли ви вводите "svn скасувати d", але результати пошуку не є корисними.

редагувати: Я хотів би рішення, яке працює в підривному режимі 1.4.4


Чи є каталоги братів та сестер до того, який ви видалили з очікуванням змін? Якщо так, будьте обережні, повертаючись з більш високого рівня, ви можете втратити зміни.
Рассел

Відповіді:


145

svn revert deletedDirectory

Ось документація для svn revertкоманди.


EDIT

Якщо це deletedDirectoryбуло видалено з використанням, rmdirале ні svn rm, вам потрібно буде це зробити

svn update deletedDirectory

замість цього.


3
Це повинно бути новим, воно не працює у SVN 1.4.4. (Це було перше, що я спробував.)
LaC

4
Про це говорить 1.4.4, btw: $ svn допоможе відновити відновлення: відновлення незайманого файлу робочої копії (скасувати більшість локальних редагувань). використання: повернути PATH ... Примітка. Цей підкомандний не вимагає доступу до мережі та вирішує будь-які конфліктні стани. Однак видалені каталоги не відновлюють.
LaC

1
1.6.6 має той самий текст у довідці, але він працював для мене, коли я тестував його. Зауважте, що якщо ви не використовували svn deleteдля видалення каталогу, а натомість видалили його за допомогою rmdir, вам потрібно буде зробити це svn update deletedDirectory.
Майкл Хакнер

Я видалив один файл (svn del) з локального каталогу svn-ed. оновлення svn не працювало, але відновлення svn працювало. Я використовував SynchroSVN для Mac. Однак дякую за поради.
Карім

5
Відповідно до посилання, використовуйте svn -R повернення, щоб відновити весь каталог із усім вмістом, що, мабуть, ви хочете. повернення svn без -R просто відновлює каталог, а не вміст.
n13

156

1) робити

svn revert . --recursive

2) вихід синтаксичного аналізу на зразок помилок

"Failed to revert 'dir1/dir2' -- try updating instead."

3) викликати svn для кожної з каталогів помилок:

svn up dir1/dir2

12
Це найточніша відповідь, дуже дякую, ти мені дуже допоміг.
greenoldman

1
За винятком того, що повертає все? Можливо, ви не хочете цього робити.
n13

1
Це має найбільш сенс, якщо у вас є вся папка, яку SVN вважає видаленою. У мене це було під час перевірки робочої копії. Одна папка вже існувала, тому вона була розміщена в конфлікті і не перевірялася. Це було посилання на іншу папку. Я перейменував його і спробував svn upзмусити його перевірити, зрозумів конфлікт, зробив svn resolved fooі svn statusсказав мені, що у мене близько 10-ти файлів, позначених як D. svn upі svn revertне повернув їх назад, але це вирішило проблему.
симбабк

6
+1, для --recursiveякого допомагає відновити вміст видалених каталогів.
Мелебій

1
О Боже, ти врятував мій вечір!
ArturOlszak

32

Те, що для мене працювало, - це

svn revert --depth infinity deletedDir

Це спрацювало для мене чудово (svn 1.7.10), коли svn відновити deleteDir не вдалося виконати роботу. Відмінна відповідь.
Ртом

4

Виконайте (рекурсивну) операцію повернення з рівня над каталогом, який ви видалили.


1
Це знищить ШЛЯХ більше змін, ніж потрібно.
Майкл Хакнер

Це не працює з Subversion 1.4.4 (я тільки що спробував це). svn help revert навіть говорить, що "ця підкоманда не потребує доступу до мережі та вирішує будь-які конфліктні стани. Однак вона не відновлює видалені каталоги". Вибачте, я мав би вказати версію. 1.4.4 - це те, що постачається з Mac OS X 10.5.
LaC

4

Щоб перетворити його в один вкладиш, ви можете спробувати щось на кшталт:

svn status | cut -d ' ' -f 8 | xargs svn revert

Я можу створити каталог з пробілами в його імені. Це може зламати "різання" AFAIK.
Денис Барменков

1

Найпростіше рішення, яке я міг знайти, - видалити батьківський каталог із робочої копії (з rm -rf, не svn delete), а потім запустити оновлення svn у бабусі та дідусі. Наприклад, якщо ви видалили a / b / c, rm -rf a / b, cd a, svn up. Це повертає все. Звичайно, це лише гарне рішення, якщо у батьківського каталогу, які ви хочете зберегти, немає інших невмілих змін.

Сподіваємось, ця сторінка буде вгорі результатів наступного разу, коли я переглядаю це питання в Google. Ще було б краще, якби хтось, звичайно, запропонував більш чистий метод.


Тобто, якщо у батьків немає підкаталогів, які мають зміни в очікуванні.
Рассел

0

Ви можете видалити папку та оновити батьківський каталог, перш ніж зробити це:

rm -r some_dir

svn update some_dir_parent

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