Чи є спосіб відновитись після випадкового “повернення svn”?


94

Сьогодні вранці мені вдалося застрелити собі ногу, зробивши наступне:

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

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

Але для мого майбутнього посилання (тобто наступного разу, коли я зроблю ту саму тупу помилку) ... чи є спосіб сказати svn скасувати "повернення svn"? Чи зберігає svn де-небудь резервну копію локальних / незареєстрованих відмінностей?


34
IIRC TortoiseSVN переміщує повернені файли до кошика, але оригінальний клієнт командного рядка SVN не має таких нюансів.
Даріо Солера

1
Я не можу знайти файл у кошику. Мені не пощастило?
далкантара,

5
Найкращий коментар щодо кошика. Це просто врятувало мій день!
OrganicPanda

2
Мій також! Дуже дякую. Скасований файл щойно з’явився у моєму кошику та його можна було відновити.
sladda

1
Ви щойно врятували мою задню частину за допомогою цієї корзини !!!
Epirocks

Відповіді:


79

Ні, (абсолютно) НІ .

Якщо ви скажете Subversion, що він повинен повернути файл, всі зміни зникли вітром.

Повернути їх може лише ваша пам’ять.

Виняток: Нові файли, які ви додали, лише втратять статус "додано", але файл залишиться в цьому каталозі, лише статус невідомий ("?")

Виняток платформи / програмного забезпечення: Використовуючи TortoiseSVN у Windows, функція "Скинути" спочатку перекидає файли в кошик, а потім повертає їх назад. Ви можете копатись у кошику, щоб відновити файли.


10
Додаток до вищезазначеного: Контроль версій допомагає лише у випадку, якщо ви насправді фіксуєте файли. Якщо ви перебуваєте в положенні, що вбивство вашої робочої копії призведе до загибелі годин роботи, то ви не виконуєте дії досить часто.
myron-semack

1
Погоджено ... у цьому випадку сервер svn не працював, і саме тому я мав незмінені зміни, які ще очікували на розгляд. : ^ (
Jeremy Friesner

13
Так!!! Існує спосіб відновлення залежно від O / S та / або IDE - прочитайте інші відповіді нижче, перш ніж у вас станеться серцевий напад !!
HDзберегти

2
Це неправда, це трохи складніше, ніж просте НІ. Скористайтеся інструментом відновлення або, якщо вам пощастить, файли знаходяться в кошику.
RaphMclee

1
@RalphMclee: Це залежить від платформи та клієнта svn. TortoiseSVN збереже повернені нові файли в кошик. Це лише виняток. І я сумніваюся, що інструмент відновлення може послідовно відновлювати зміни у ваших файлах. Запам'ятати набагато простіше і зрозуміліше: повернення знищить вашу роботу, використовуйте її обережно!
Пітер Паркер,

104

Є рішення ... перейдіть до кошика, там ви знайдете останню версію видаленого файлу. Черепаха "кидає" у смітник кожен файл, який вона повертає.


2
До речі, це також те, чому TortoiseSVN здається настільки повільним при виконанні ревертів. Переміщення файлу в кошик є дуже повільною операцією, коли кошик заповнений. Ви можете вимкнути цю функцію в налаштуваннях TortoiseSVN "Загальні - діалоги 1".
Вім Конен

8
Спасибі, ти врятував мене! Я випадково зробив Реверт і майже втратив 2 тижні роботи. На щастя, я знайшов його в кошику для сміття.
Аріє Лівшин

2
@ArieLivshin, чому б ти працював 2 тижні без зобов'язань? Здається, вам потрібно дізнатись більше про гілки.
JoelFan

Набридливо ankhsvn цього не робить
Phil Hale

Дякую .. Дуже допомагаю ful.
Prem Singh Bist,

32

Не дуже Subversion, але якщо ви працюєте з Eclipse, ви можете спробувати свою удачу в місцевій історії.

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

Або ви можете використовувати Git локально, але я ніколи не пробував.


3
FYI - дістатися до місцевої історії за допомогою контекстного меню правої кнопки миші "Відновити з місцевої історії".
HDзберегти

Для частини Затемнення, ось більш конкретну відповідь: stackoverflow.com/a/18220708/517705
Sk8erPeter

14

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


Дякую! Це врятувало мене від переробки годин роботи! Я ніколи раніше не бачив цієї особливості вікон, але це врятувало мій бекон!
NibblyPig

Куди я можу переслати 6000 доларів, які я вам винен за це, заощадивши тим самим дні роботи? Урок засвоєно ...
HDзалишити

Дякую, це врятувало мій день.
Opax Web

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

8

Ви не можете відновити файли, якщо використовуєте клієнт командного рядка svn .

Але ви можете їх відновити, якщо ви використовуєте TortoiseSVN як свого клієнта svn. TortoiseSVN автоматично перемістить їх до вашого кошика. Ви можете відновити їх звідти після випадкового повернення.

Це налаштовуваний параметр у TortoiseSVN. Це знаходиться в розділі Налаштування -> Діалогове вікно 1 -> Використовувати кошик під час повернення.

За замовчуванням це позначено, що означає, що файли переміщуються в кошик. Якщо хочете (в основному вам все одно, щоб вимкнути це. Якщо у вас є причина, будь ласка, дайте мені також знати)


1
Чудово! ... врятував мене
Янані Кумар

6

Якщо ви використовуєте InteliJ, то ви щаслива людина. У верхньому меню у вас є опція Контроль версій, і під нею ви знайдете опцію локальної історії, де ви знайдете всю історію для вибраного файлу, включаючи всі операції, які ви зробили з цим файлом (оновлення, фіксація, повернення).

Удачі, Аркде


1
І якщо це був новий файл, сам файл буде видалено. У такому випадку виберіть папку, у якій знаходився файл, з подання проекту, а потім виберіть «Місцева історія». IntelliJ знову врятував день.
Nufail

4

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


2

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

АЛЕ: Я відновив свої втрачені файли за допомогою Handy Recovery, тобто SVN просто видаляє мої файли при поверненні.

Використовуйте будь-яке програмне забезпечення для відновлення даних для відновлення відновлених файлів (наприклад, пробне Handy Recovery )


2

Мені надзвичайно пощастило знайти локальний журнал змін файлу (Local Revision) у браузері історії в Eclipse. Я перевіряв відмінності по черзі, і зробив кілька збережень у файлі до перезапису.


1

Ні, SVN не веде журналу або резервної копії (хоча рішення для TortoiseSVN є в інших відповідях).

Але на випадок, якщо хтось переглядає відповіді та не помітив цього коментаря у питанні ОП:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.