Есть ли способ оправиться от случайного "svn revert"? - PullRequest
91 голосов
/ 05 октября 2009

Сегодня утром мне удалось выстрелить себе в ногу, выполнив следующее:

  1. Начал работать над изменением моего проекта
  2. Сделано кучу правок в кучу файлов
  3. Понял, что мой подход был совершенно неверным, и что мне нужно было начинать все сначала
  4. cd'd на верхний уровень моего проекта и сделал "svn - рекурсивный возврат". восстановить локальную песочницу до состояния, предшествующего изменениям.
  5. В ужасе взвыл, когда я понял, что в моей локальной песочнице произошел ряд других изменений, и я только что уничтожил их все. (svn-сервер не работал в прошлую пятницу, поэтому я не смог их зарегистрировать и забыл о них в выходные)

К счастью, в этом случае я выполнил «svn diff> temp.txt» перед тем, как уйти с работы в пятницу, и файл temp.txt все еще находился на моем жестком диске, поэтому я смог передать этот файл в «патч» и восстановить мои потерянные изменения.

Но для моей будущей ссылки (то есть в следующий раз, когда я совершу ту же глупую ошибку) ... есть ли способ сказать svn отменить "svn revert"? Сохраняет ли svn резервную копию локальных / не отмеченных различий где-либо?

Ответы [ 10 ]

98 голосов
/ 16 декабря 2009

Есть решение ... перейдите в корзину, там вы найдете последнюю версию удаленного файла. Черепаха "выбрасывает" в корзину каждый возвращаемый файл

72 голосов
/ 05 октября 2009

Нет, (абсолютно) НЕТ .

Если вы скажете Subversion, что он должен вернуть файл, все изменения исчезнут.

Только ваша память может вернуть их.

Исключение: Новые файлы, которые вы добавили, потеряют только статус "добавлено", но файл останется в этом каталоге, только статус неизвестен ("?")

Исключение платформы / программного обеспечения: При использовании TortoiseSVN в Windows программа Revert сначала выбрасывает файлы в корзину, а затем восстанавливает их. Вы можете копать в корзину, чтобы восстановить файлы.

30 голосов
/ 06 октября 2009

Не совсем Subversion, но если вы работаете с Eclipse, вы можете попытать счастья в местной истории.

Теперь кое-что более специфичное для Subversion: если вы не хотите создавать ветвь для каждого изменения, которое вы делаете, вы можете сохранить пару транков локально (trunk-modif-1, trunk-modif- 2 ...). Каждая «модификация» выполняется в отдельном дереве, и вам нужно только сохранить список проверок, которые соответствуют какой модификации.

Или вы можете использовать Git локально, но я никогда не пробовал.

13 голосов
/ 17 ноября 2011

Недавно совершил эту ошибку, не передав новые изменения файлов (около 10) в SVN, и все они исчезли из-за моей глупой ошибки. Но что меня спасло, так это опция «Восстановить предыдущие версии» в контекстном меню. Фу, это было облегчением и извлеченным уроком.

7 голосов
/ 14 сентября 2015

Невозможно восстановить файлы, если вы используете клиент командной строки svn .

Но вы можете восстановить их, если вы используете TortoiseSVN в качестве svn-клиента. TortoiseSVN автоматически переместит их в вашу корзину. Вы можете восстановить их оттуда после случайного возврата.

Это настраиваемый параметр в TortoiseSVN. Он находится под Настройки -> Диалог 1 -> Использовать корзину при возврате.

По умолчанию это отмечено, что означает, что файлы перемещаются в корзину. Если вы хотите (в основном вы не хотите отключать это. Если у вас есть причина, пожалуйста, дайте мне знать)

5 голосов
/ 02 марта 2012

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

Удачи, Arkde

4 голосов
/ 17 сентября 2012

Кроме того, если вы вернули свой код .NET (файлы .cs и т. Д.) И создали свое приложение до возврата, но после внесения изменений вы можете восстановить изменения из файла сборки, используя любой из инструментов отражателя для просмотра. код.

1 голос
/ 08 февраля 2018

Мне очень повезло найти локальный журнал изменений файла (Local Revisions) в браузере истории в Eclipse. Я проверял различия один за другим и перед записью переписал пару файлов в файл.

1 голос
/ 24 декабря 2014

Я отменил решение (Visual Studio + AnkhSVN) и потерял изменения нескольких файлов. Я не могу найти файл в корзине.

НО: Я восстановил потерянные файлы с помощью Handy Recovery, т.е. SVN просто удаляет мои файлы при возврате.

Используйте любое программное обеспечение для восстановления данных для восстановления обращенных файлов (например, пробная версия Handy Recovery )

0 голосов
/ 09 декабря 2016

Нет, SVN не ведет журнал или резервную копию (хотя есть решение для TortoiseSVN, отмеченное в других ответах).

Но если кто-то просматривает ответы и не заметил этот комментарий в вопросе ОП:

"К счастью, в этом случае я выполнил" svn diff> temp.txt "перед тем, как уйти с работы в пятницу, и файл temp.txt все еще оставался на моем жестком диске, поэтому я смог вставить этот файл в" патч " "и верни мои потерянные изменения."

Я полагаю, что это обычная парадигма делать svn diff перед тем, как сделать svn revert. Если у вас есть привычка делать это, даже если разность отображается только в терминале, у вас есть хотя бы один возможный способ восстановить потерянные изменения.

...