SVN Revert Trunk, удалить ревизию, как если бы она никогда не существовала?

возможно ли на сервере svn удалить ревизию, как если бы она никогда не существовала?

Итак, у нас есть следующие изменения:

1004 // Commit of some bogus code that broke the build and was just wrong
1003 // Change 1.2
1002 // Change 1.1
1001
1000 *** Initial checkin

можем ли мы удалить 1004 в svn и вернуться к 1003, как будто 1004 никогда не существовало?

простите мое невежество, я все еще учусь использовать SVN.

5 ответов


системы VCS разработаны специально, чтобы сделать это как можно более сложным. Обычно ты этого не хочешь.

это, как говорится, из официальных документов:

есть особые случаи, когда вы можете захотеть уничтожить все доказательства файла или фиксации. (Возможно, кто-то случайно передал конфиденциальный документ.) Это не так просто, потому что Subversion намеренно разработана, чтобы никогда не терять информацию. Ревизии-это неизменяемые деревья которые строятся друг на друге. Удаление ревизии из истории вызовет эффект домино, создаст хаос во всех последующих ревизиях и, возможно, аннулирует все рабочие копии.

у проекта есть планы, однако, когда-нибудь реализовать svnadmin obliterate команда, которая выполнит задачу окончательного удаления информации. (См.проблема 516.)

тем временем, ваш единственный выход -svnadmin dump репозиторий, затем труба dumpfile через svndumpfilter (исключая плохой путь) в . См.Глава 5 из книги Subversion для подробностей об этом.

http://subversion.apache.org/faq.html#removal


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

svn merge -r [current_version]:[previous_version] [repository_url]
svn commit -m “Reverting previous commit and going back to revision [previous_version].”

Если вы используете TortoiseSVN, вы можете просто показать журналы, выбрать фиксацию и выбрать "отменить изменения из этой ревизии" в контекстном меню. Он изменит вашу рабочую копию на предыдущую версию, и вам просто придется совершать.

Я думаю, что другие графические клиенты имеют ту же опцию.


вы можете переместить магистраль в другую ветку (резервную копию) и скопировать правильную ревизию обратно в магистраль

svn mv trunk https://svn_path/tags/trunk_broken
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk

обратите внимание, что номер версии будет увеличиваться и все изменения будут отображаться в лог СВН.


вы можете создать дамп текущего репозитория и пропустить фиктивную ревизию в дампе. Затем вы можете загрузить дамп в новый репозиторий на том же сервере или на другом.


Я рекомендую оставить редакцию, если у вас нет реальной причины (например, нехватка места), чтобы удалить ее. Это основная задача сервера SVN, чтобы сохранить изменения.