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, чтобы сохранить изменения.