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.

Ответы

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Обратите внимание, что номер версии будет увеличиваться, и все изменения будут отображаться в журнале svn.

Ответ 4

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

Ответ 5

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