Подтвердить что ты не робот

Восстановить случайную проверку

Вы используете подрывную деятельность, и вы случайно проверяете код до его готовности. Например, я часто: a) проверил некоторый код, затем b) немного отредактировал, затем c) нажмите вверх, введите, чтобы повторить предыдущую команду, которая, к сожалению, была проверкой.

Можно ли отменить такую ​​случайную проверку с сервера с помощью подрывной деятельности?

4b9b3361

Ответ 1

NB: ЭТО ВЕРОЯТНО НЕ РАБОТАЕТ НА ТЕКУЩИХ ВЕРСИЯХ СУБВЕРСИРОВАНИЯ И ПЛОХОЙ ИДЕИ - но я оставил его здесь для информации

NB: Обычно, когда вы зарегистрировались по ошибке, вам нужно просто вернуть фиксацию - см. другие ответы на этот вопрос. Однако, если вы хотите знать, как фактически отменить эффекты фиксации и изменить репозиторий таким образом, как это было раньше, объясните следующее:

Это не то, что вы обычно хотите, но если вы действительно хотите удалить фактическую версию из репозитория, то вы можете сделать неприятный откат в репозитории следующим образом (это предполагает, что $REV устанавливается в последнюю версию, которую вы удаляете):

  • Сначала создайте резервную копию своего репозитория, так как эти изменения могут сломать его (и прочитать приведенные ниже предположения)
  • Верните свою локальную копию в предыдущую версию, чтобы она не запуталась (svn revert -r $((REV-1)))
  • В репозитории удалите db/revs/$REV и db/revprops/$REV
  • В репозитории удалите db/current и (для subversion 1.6 или выше) db/rep-cache.db и запустите svnadmin recover .
  • (Возможно) отрегулируйте разрешения на db/rep-cache.db, чтобы предотвратить попытку записи ошибок в исходной базе данных.

Все это предполагает:

  • Вы используете репозиторий на основе fsfs
  • Выпуск Subversion больше 1.5.0 (в противном случае вам нужно вручную отредактировать db/current и изменить номер версии, а не выполнить svnadmin recover .)
  • Никаких других последующих изменений не было сделано
  • У вас есть доступ на запись к файловой системе репозитория
  • Вы не боитесь, что кто-то еще пытается получить к нему доступ, пока вы делаете выше.

Я сделал это, когда огромный файл был привязан к репозиторию, который я не хотел оставаться в истории (и зеркала и т.д.) навсегда; это никоим образом не идеальная или нормальная практика...

Ответ 2

Смотрите SVNBook, в частности раздел "Отменить изменения" и обратное слияние.

Другим распространенным применением слияния svn является откат уже сделанного изменения. Предположим, вы счастливо работаете на рабочей копии /calc/trunk, и вы обнаружите, что изменение, внесенное в исправление 303, которое изменило integer.c, совершенно неверно. Это никогда не должно было быть совершено. Вы можете использовать svn merge, чтобы "отменить" изменение в вашей рабочей копии, а затем зафиксировать локальную модификацию в репозитории. Все, что вам нужно сделать, это указать обратную разницу:

$svn merge -r 303: 302 http://svn.example.com/repos/calc/trunk

Чтобы уточнить, ваше первоначальное изменение все равно будет находиться в репозитории. Но теперь вы убрали его в более позднюю редакцию. т.е. репозиторий зафиксировал все ваши изменения (это действительно то, что вы хотите! Если вы не проверили пароль незашифрованного текста или подобное!)

Ответ 3

ПРЕДУПРЕЖДЕНИЕ. Принятый ответ (Дэвидом Фрейзером) должен работать с репозиторием SVN 1.5, но с SVN 1.6 вы также должны удалить db/rep-cache.db до следующего фиксации или поврежденный репозиторий и может не осознавать его до следующего раза, когда вы попробуете полный контроль. Я видел, как последующие полные проверки выходят из строя с ошибкой "Недостаточно сформированный заголовок представления".

Что такое rep-cache.db, вы можете спросить? Документация на макете FSFS говорит, что вы потеряете "возможности обмена сообщениями", если вы удалите этот файл; однако он будет воссоздан при следующем совершении. Совместное использование изображений было добавлено в версии 1.6.

Ответ 4

Используя TortoiseSVN, выберите "Показать журнал" и найдите версию, к которой вы хотите вернуться. В контекстном меню выберите "Вернуться к этой ревизии". Это приведет к обратному объединению в вашу рабочую копию, поэтому вам нужно будет выполнить свою рабочую копию для завершения операции.

См. также Как мы отслеживаем филиал нашей рабочей копии?: -)

Ответ 5

Если вы имели в виду, как я могу удалить историю случайной проверки: Это сложно.

svn не позволяет вам ничего отменить, так как он сохраняет изменения в качестве наборов изменений. Тем не менее, есть некоторые инструменты, которые позволяют делать почти что угодно на дампе репозитория. Вы могли:

Но это может полностью испортить ваше репо, поэтому никогда не пытайтесь это делать, если вы не знаете, что делаете, и все подкреплено.

Ответ 6

Да, на самом деле это Subversion.

Что вам нужно сделать, просто замените свою копию предыдущей версией в репозитории SVN.

Существует несколько вариантов:

  • Заменить с версией.
  • Заменить URL-адрес
  • Последний из репозитория (но в вашем случае у вас уже есть последний)
  • Заменить с помощью ветки

Но я настоятельно рекомендую вам выполнить следующие действия перед заменой вашей локальной копии:

  • Сделайте "Сравнить с репозиторием/Версия/URL".

Ответ 7

Вы не можете удалить ревизию. Несколько ответов здесь, похоже, полностью не понимают, что вы хотите. Но вы можете изменить сообщение для проверки, чтобы указать, что это было непреднамеренно. Checkins не стоят очень дорого, поэтому с лишним лишним не стоит ничего.

Ответ 8

Я бы сомневался. Одна из основных идей управления версиями заключается в том, что репозиторий не потерял никакой истории. Вы не можете удалить историю. Лучшее, что вы можете сделать, это получить более старую версию и перезаписать текущую. Но журналы истории все равно покажут вашу ошибку.

(Offtopic: какая среда IDE вы используете, что-то вроде этого?)

Ответ 9

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

Ответ 10

Прокомментировать это: Это серия команд, которые я сделал в репозитории, чтобы вернуть его из версии 2 обратно в версию 1. Вам также нужно будет проверить в конце.

Last login: Mon Apr 13 16:01:34 on ttys004
[[email protected] ~] cd /tmp
[[email protected] /tmp] svnadmin create foo
[[email protected] /tmp] svn co file:///tmp/foo foo-repo
Checked out revision 0.
[[email protected] /tmp] cd foo-repo/
[[email protected] foo-repo] ls
[[email protected] foo-repo] touch blah
[[email protected] foo-repo] touch repl
[[email protected] foo-repo] touch bar
[[email protected] foo-repo] svn add *
A         bar
A         blah
A         repl
[[email protected] foo-repo] svn ci
Adding         bar
Adding         blah
Adding         repl
Transmitting file data ...
Committed revision 1.
[[email protected] foo-repo] echo "hi" > bar
[[email protected] foo-repo] echo "oh no" > blah
[[email protected] foo-repo] svn ci
Sending        bar
Sending        blah
Transmitting file data ..
Committed revision 2.
[[email protected] older-foo] svn diff -r 1:2 file:///tmp/foo
Index: bar
===================================================================
--- bar (revision 1)
+++ bar (revision 2)
@@ -0,0 +1 @@
+hi
Index: blah
===================================================================
--- blah    (revision 1)
+++ blah    (revision 2)
@@ -0,0 +1 @@
+oh no

[[email protected] foo-repo] svn diff -r 1:2 file:///tmp/foo | patch -R
patching file bar
patching file blah    

Ответ 11

Иногда необходимо отредактировать репо на сервере, например, когда вы случайно совершили пароль, который трудно изменить. Здесь метод, который, как я считаю, полностью безопасен (ответ от @David Fraser вызвал повреждение репо для меня). NB этот метод будет удалять только исправления с конца репо, поэтому он наиболее полезен, если вы сразу заметите свою ошибку.

  • Сообщите всем своим пользователям, что репо отключено, и что им нужно будет создать новую проверку с сервера.
  • Возьмите repo в автономном режиме, возьмите резервную копию и переместите основное репо в безопасное место с именем наподобие reponame_old.
  • Сбросьте репо на однофайльное представление, оставив ненужные ревизии с конца:
    • svnadmin dump -r 0:N > reponame.dump
    • например. svnadmin dump -r 0:6610 > reponame.dump будет удалять обороты 6611 и далее
    • Обратите внимание, что файл repodump может быть в два раза больше размера вашей папки репо.
  • Создайте новое репо, чтобы загрузить эти изменения:
    • svnadmin create reponame
  • Загрузите отрегулированный набор изменений в новое репо
    • svnadmin load reponame < reponame.dump
  • Примените любые необходимые настройки к вашему новому репо (например, крючки) и верните его в службу.
    • Мы используем сервер VisualSVN, поэтому нам пришлось восстановить файл conf\VisualSVN-WinAuthz.ini.
    • Мы также увидели некоторое нечетное поведение, пока не перезагрузили сервер, поэтому VisualSVN может кэшировать состояние репо; YMMV с другими настройками хостинга.
  • Не забудьте либо удалить резервную копию с помощью секретных данных, либо поставить ее в безопасное место.
  • Сообщите всем пользователям, чтобы сделать новый svn checkout с сервера репо.