Есть ли способ оправиться от случайного "svn revert"?

Мне удалось застрелиться в ногу этим утром, сделав следующее:

  • Начнется работа над изменением моего проекта.
  • Сделал кучу изменений в кучу файлов
  • Понял, что мой подход был неправильным, и что мне нужно было начать больше
  • cd'd на верхний уровень моего проекта и сделал "svn -recursive revert". для восстановления моей локальной песочницы до состояния предварительного изменения.
  • Завыл от ужаса, когда понял, что в моей локальной песочнице было много других изменений, и я просто уничтожил их всех. (сервер svn был в прошлую пятницу, поэтому я не смог проверить их, и я забыл о них в выходные)

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

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

Удачи, Arkde

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

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

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

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