SVN Revert Trunk, удалить ревизию, как будто ее никогда не существовало? - PullRequest
14 голосов
/ 26 августа 2011

Возможно ли на сервере 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 ]

27 голосов
/ 26 августа 2011

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

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

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

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

15 голосов
/ 26 августа 2011

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

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

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

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

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

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

4 голосов
/ 08 мая 2013

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

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

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

0 голосов
/ 20 декабря 2013

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

0 голосов
/ 29 августа 2011

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

...