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 ваш репозиторий, затем направьте дамп-файл через svndumpfilter (исключая плохой путь) в svnadmin load команда. См. Главу 5 книги Subversion для подробностей об этом.

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

Эти аварии случаются, и это не проблема, если 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.

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

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

Другие вопросы по тегам