2012-01-29 2 views
2

A очень умный разработчик удалил почти весь репозиторий и совершил его (rev 210). У меня есть рабочая копия на моем компьютере, но репозиторий довольно большой.SVN возвращается на серверной стороне

Я хотел бы создать новую ревизию (211), которая идентична последней хорошей ревизии (209). Я не хочу ничего хранить из версии 210, которая является плохим фиксатором. Это ошибка разработчиков, и им придется переписывать что угодно, насколько мне известно.

Идеи?

+0

время для перехода на git –

+1

Время запуска этого разработчика –

+2

Удаление файла (или всего репозитория), а затем фиксация не приводит к потере чего-либо. В этом весь смысл системы контроля версий, она не позволяет вам постоянно проигрывать, если вы ошибаетесь. –

ответ

1

Если этот разработчик не удалил репозиторий на сервере, то весь ваш код в безопасности. Все, что вам нужно сделать, чтобы проверить это, - создать новую пустую папку, а затем выполнить проверку SVN из ревизии 209 вместо HEAD. Это даст вам каждый отдельный файл в своем состоянии для пересмотра 209. Вы можете сделать это на любой из ваших рабочих станций dev, не нужно ничего делать на сервере.

Чтобы вернуть изменения, просто поднимите окно SVN Show Log (при использовании TSVN) в корневой рабочей копии и выберите версию 209, затем выберите «Вернуть в ревизию» - это сделает обратное слияние изменений в ревизии 210, который вы можете проверить в качестве ревизии 211. Это должно решить вашу проблему.

Если разработчик удалил репозиторий на вашем SVN-сервере, для восстановления вашего кода требуется ежедневная резервная копия.

До тех пор, пока ваш репозиторий на сервере не поврежден, удалить SVN невозможно. Когда вы удаляете что-то, оно просто становится невидимым с этой точки вперед, но вы всегда можете вернуться к любой версии любого файла в репозитории - вам просто нужно перейти к правильной ревизии.

+0

Спасибо. Это решило проблему. Очень признателен. Я знаю, что код в безопасности, я понимаю эту часть SVN. Я просто хотел создать новую версию (211), которая была точно такой же, как 209. Большое спасибо! –

+0

@ScottCrooks Я рад, что это помогло. Не могли бы вы принять мой ответ в этом случае? – xxbbcc

0

Рудиментарный путь на машине Linux будет:

cp PRJ ../../bkup 
svn up PRJ 
cp ../../bkup PRJ 
cd PRJ 
svn add * 
svn ci -m "everything again" PRJ 

Надеется, что вы получите точку

7

Это может быть решено с помощью reverse-merging:

Следующей команда вернет вашу рабочую копию состояние пересмотра 209:

svn merge -c -210 . 

Тогда ком мит:

svn ci -m "reverse merged revision 210" 
0

Существует один уродливый способ, который работает для меня ... если вы хотите, чтобы удалить последний коммит, а не какой-то совершить в середине.

Первый - завершение работы SVN сервера и резервное копирование ваших репо по svnadmin hotcopy repo repo_backup

Перейти к серверу SVN и продолжить свой репозиторий. Посмотрите ./db/revs/X/, где X - это первый номер неправильного коммита. Вы можете увидеть там неправильный файл фиксации (например, 123). Удалите этот файл и затем измените ./db/current, чтобы указать на фиксацию до (например ,.122).