Есть ли способ восстановиться после случайного «возврата к svn»?


95

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

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

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

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


34
IIRC TortoiseSVN перемещает восстановленные файлы в корзину, но исходный клиент командной строки SVN не имеет таких нюансов.
Дарио Солера

1
Я не могу найти файл в корзине. Мне не повезло?
dalcantara

5
Верхний комментарий относительно корзины. Это просто спасло мне день!
OrganicPanda,

2
мой тоже! Спасибо большое. Восстановленный файл только что появился в моей корзине, и его можно было восстановить.
sladda

1
Вы только что спасли мою задницу с помощью этой корзины !!!
Epirocks

Ответы:


79

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

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

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

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

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


10
Дополнение к вышесказанному: Контроль версий поможет вам только в том случае, если вы действительно зафиксируете файлы. Если вы находитесь в положении, когда убийство вашей рабочей копии убьет часы работы, значит, вы совершаете коммит недостаточно часто.
myron-semack 05

1
Согласен ... в этом случае svn-сервер не работает, и поэтому у меня все еще ожидаются незавершенные изменения. : ^ (
Джереми Фриснер

13
Да!!! В зависимости от вашей операционной системы и / или IDE есть способ выздоровления - прочтите другие ответы ниже, прежде чем у вас случится сердечный приступ !!
HDave

2
Это неправда, это немного сложнее, чем просто НЕТ. Воспользуйтесь инструментом восстановления или, если вам повезет, файлы окажутся в корзине.
RaphMclee

1
@RalphMclee: Это зависит от платформы и клиента svn. TortoiseSVN сохранит возвращенные новые файлы в корзину. Это просто исключение. И я сомневаюсь, что инструмент восстановления может последовательно восстановить изменения в ваших файлах. Это намного проще и понятнее запомнить: откат разрушит вашу работу, используйте ее осторожно!
Питер Паркер

104

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


2
Кстати, именно поэтому TortoiseSVN кажется таким медленным при выполнении откатов. Перемещение файла в корзину - очень медленная операция, когда корзина заполнена. Вы можете отключить эту функцию в настройках TortoiseSVN «Общие - диалоги 1».
Вим Коенен,

8
Спасибо, чувак, ты меня спас! Я случайно сделал Revert и почти потерял 2 недели работы. К счастью, я нашел его в мусорной корзине.
Ари Лившин,

2
@ArieLivshin, зачем вам работать две недели, не совершая никаких действий? Похоже, вам нужно больше узнать о ветках.
JoelFan

К сожалению, ankhsvn этого не делает
Фил Хейл

Спасибо .. Очень полезно.
Prem Singh Bist,

32

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

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

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


3
К вашему сведению - перейдите к местной истории через контекстное меню правой кнопки мыши «Восстановить из локальной истории».
HDave

Для части Eclipse вот более конкретный ответ: stackoverflow.com/a/18220708/517705
Sk8erPeter

14

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


Спасибо! Это избавило меня от необходимости переделывать часы работы! Я никогда раньше не видел эту особенность окон, но она спасла меня!
NibblyPig

Куда я могу отправить вам 6000 долларов, сэкономив таким образом дни работы? Урок усвоен ...
HDave

Спасибо, это спасло мне день.
Opax Web

Я оставляю контрольную точку, поддерживающую такое восстановление, отключенной, потому что это снижает производительность. Недавно Eclipse удалил папку с моими проектами, включая архив git, из-за проблемы с функцией отмены, и мне очень хотелось, чтобы она была включена. Однако программа Windows под названием Recuva спасла меня, выполнив поиск в удаленном файловом пространстве. Я был очень осторожен, чтобы не добавлять дополнительный контент на затронутый диск, пока я не восстановил все свои файлы, и это давало мне все исходные файлы, измененные с момента моей последней резервной копии неделей ранее. Двоичные файлы в большинстве случаев не подлежали восстановлению.
Карл

8

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

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

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

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


1
Потрясающе! ... спас меня
Джанани Кумар

6

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

Удачи, Аркде


1
И если это был новый файл, сам файл будет удален. В этом случае выберите папку, в которой находился файл, в представлении «Проект», а затем выберите «Локальная история». IntelliJ снова спас положение.
Nufail 05

4

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


3

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


2

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

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

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


1

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.