Хочете видалити редакції з мого сховища SVN


33

Останні зміни в моєму репортажі коду були пошкоджені та дестабілізували мою програму. Я хочу повернутися до попередньої редакції.

Але я не хочу просто використовувати «повернути» на своїй робочій копії; Насправді я хочу видалити мою редакцію голови та декілька змін, які були попередніми в моїй репо-репортажі, тим самим "повернувши" своє репо до попередньої редакції, яка стала б головною редакцією. Хтось знає, як я це зробив?


1
Ви не можете дійсно видалити старі версії, все, що ви можете зробити, це скасувати зміни та зробити це, як зазначає Фелікс. Цікавий sidenote, Git (як і інші рішення контролю версій) насправді дозволяє вам по-справжньому видалити версії ..
davr

3
Так, ви можете, вам просто потрібен доступ до сховища SVN за допомогою svnadmin. Дивіться мою відповідь нижче.
Мартін

davr технічно прав. Те, що ви описуєте, - це скидання всіх ревізій, окрім поганих, потім скидання цього зверху на старе репо. На мій погляд, це насправді не те саме, що "вилучення" редакції.
Сірекс

Відповіді:


12

Можливо, це посилання допоможе вам:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Цитата:

  1. Перейдіть до верхнього каталогу в межах вашої робочої копії (якщо припустити, що ви хочете повернути всю робочу копію).

  2. запустіть, svn revertщоб повернути файли робочої копії до стану, в якому вони були, коли ви востаннє чинили / виїжджали.

  3. запустіть, svn status -vщоб побачити, якому номеру ревізії відповідає ваша робоча копія (це найвищий номер редакції у списку, який svn status -vвиробляється).

  4. запустіть, svn merge -rXX:YYде XXце число, яке ви отримали на попередньому кроці, і YYномер редакції, на яку потрібно повернутись.

  5. Готово! Можливим винятком з цього є те, що файли у вашій робочій копії, які не існували при YYпервинному перегляді , все ще будуть там, оскільки svn за замовчуванням не видаляє речі. Якщо ви хочете позбутися від них, запустіть svn del [filename]на кожному з них.

  6. Молодці! Тепер пограйте зі своєю робочою копією так, ніби всі ці проміжні зміни ніколи не бували. І коли ви готові докладати зусиль, просто використовуйте svn фіксацію, як завжди!


1
У Windows Os, варіант №4 запустіть Не svn merge -rXX:YY .забудьте поставити крапку в кінці рядка для посилання на поточний каталог. А в TortoiseSVN є можливість зворотного злиття.
Шанта Кумара

3
Це фактично не повертається до "попередньої редакції, яка стала б головною редакцією". Це не робить старішу редакцію ГОЛА. Швидше, це створює нову ГОЛОВУ. Дивіться відповідь мартіна.
Метью Флашен

Я змінив відповідь, щоб включити зауваження Шантхи про останній період. Це теж саме на * nix.
Майк Корменді

72

Це працювало для мене. З огляду на те, що ви переглядаєте версію 1234 як HEAD і хочете відновити три останні коміти:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Ти єдиний, хто обидва зрозумів питання і дав конкретну відповідь.
Метью Флашен

6
Це технічно правильна відповідь. Слід зазначити, що це, окрім, можливо, досить складного зробити, також призведе до недійсності всіх перевірених копій - тому вам потрібно буде попередити всіх, хто також використовує репо.
sleske

1
швидко і легко, до речі, і про те, що просив плакат.
unc0зв’язано

7
Поки ви переконайтеся, що також скопіюйте UUID сховища на нове репо (див. "Настроювання svnadmin", копіювання з UUID у "svn info" на старій репо), лише замовлення, оновлені до виправлень, які ви вирізаєте, будуть визнати недійсним.
Брайан Петті

1
На нових репостах вам може знадобитися виправити дозволи на копіювання файлів або скопіювати файли в каталоги / гачки конф
AdamS

5

Я знаю, що це старе питання, однак я щойно знайшов, як це зробити за допомогою Windows / TortoiseSVN.

На думку коментаря, ви не можете "видалити" версію, але те, що ви можете зробити, це зробити більш поточну редакцію, таку ж, як і версію, до якої ви хочете повернути.

  1. Ознайомтеся з HEAD сховища для каталогу, з якого ви хочете відновити версію.
  2. Завантажте подання "Показати журнал" у TortoiseSVN для каталогу найвищого рівня, який ви хочете відновити (наприклад, "Магістральний канал").
  3. Клацніть правою кнопкою миші версію, яку ви хочете видалити ПРИМІТКА. Це версія, яку ви хочете видалити, а не та, до якої ви хочете повернутись.
  4. Виберіть "Скасувати зміни з цієї версії".
  5. Натисніть "Так" у відповідь.
  6. Оновіть замовлення як звичайне, але на "HEAD".
  7. Зверніть це назад.

Тоді ви перейдете до всіх інших, хто перевірив це, і попросіть їх оновити та видалити будь-які нові файли.

Крім того, вам потрібно буде переконатися, що всі знають, що таке перегляд, і потенційно оновити опис.


чим це відрізняється від звичайної процедури "повернення"?
Томер Ш

Відновлення просто змінює вашу робочу копію на те, що є у репо-репортажі ... це як зробити так, щоб HEAD звіту відображав стан будь-якого попереднього зобов’язання.
Мартін

1
Дякую за це - Виконання цього способу з черепаховим SVN було саме тим, що мені потрібно було повернути помилковий вчинок :)
Доктор Ендрю Бернетт-Томпсон

Також у вікні Журналу є запис контекстного меню " Повернутися до цієї редакції ".
Uwe Keim

4

Ви можете використовувати дамп / завантаження для цієї мети.

Ви також можете використовувати svnsync, щоб зробити резервну копію для певної редакції.

Якщо у вас є великий сховище, це потребує часу.


3

Для мене (VisualSVN, 30-HEAD) працює так:

  del C: \ сховища \ MyRepo \ revs \ 0 \ 30
  del C: \ сховища \ MyRepo \ revs \ 0 \ 29
  del C: \ сховища \ MyRepo \ revs \ 0 \ 28
  del C: \ сховища \ MyRepo \ revprops \ 0 \ 30
  del C: \ сховища \ MyRepo \ revprops \ 0 \ 29
  del C: \ сховища \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  


Чим це краще, ніж інші відповіді?
Toto

Це набагато швидше.
Антон Голіхофф

0

Перейдіть до терміналу і перейдіть до репситорії svn: тепер введіть

svn update -r "номер редакції, який потрібно відновити"


2
Ласкаво просимо до Супер Користувача! Будь ласка, прочитайте запитання ще раз уважно. Ваша відповідь не відповідає на початкове запитання. ОП каже: "Я не хочу просто використовувати" повернути "на своїй робочій копії"
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.