2009-07-23 3 views
1

Что, кто-то из моей команды допустил «ошибку», чтобы удалить несколько файлов в текущей версии репозитория команды. Можно ли обновить текущую локальную версию до версии главы? Когда я нажимаю на commit, subclipse не распознает отсутствующие файлы для их загрузки.SVN - Обновить полную локальную копию в HEAD Версия

Спасибо заранее,
Rayt

+0

Я не совсем понимаю ваш вопрос, но перед тем, как вы попытаетесь сделать что-нибудь, сделайте быструю резервную копию каталога с локальной ревизией. – Elijah

+0

извините, исправил предложение. теперь должен иметь больше смысла. –

ответ

9

О, ради Пита! . ответы до сих пор были - в лучшем случае - вводит в заблуждение

ваш вопрос, это звучит, как вы пытаетесь что-то вроде этого:

svn update -r8 
# ok, I can see the deleted file now 
svn commit -m "I want r8 to be newest" 

Кроме того, что не будет работать Там нет никаких модификаций. commit. Вы можете обновить до более старых версий, но вы не можете вносить туда изменения. Вы не можете изменить прошлое. Вы можете только совершить новую ревизию, отменив повреждение.

Хорошо, давайте предположим, что ваш репозиторий находится в svn: // repo. Здесь приведен упрощенный пример, в котором соединительная линия папки содержит два файла: «a» и «b». Назовем эту ревизию 8 (r8).

trunk # working copy of svn://repo/trunk 
    a 
    b 

J.R. Хакер, проскальзывает и случайно удаляет б:

svn rm b 
svn commit -m "oops" 

Давайте назовем получившийся фиксации R9.

Так, в следующий раз при обновлении из хранилища,

svn update 

trunk 
    a 

б исчезает! Паника? Нет. Это система контроля версий. Все, что было проверено, может быть восстановлено. Здесь возможны два варианта:

Просто копия файл из старой ревизии, т.е. последний пересмотр, где она по-прежнему существует: 8.

svn cp svn://repo/trunk/[email protected] . 
svn commit -m "restored b from revision 8" 

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

svn merge -r9:8 . . 
svn commit -m "reverted the changes made in revision 8" 

Путь, чтобы прочитать это слияние является:

Первая цифра, какие изменения должны быть сделаны, чтобы получить от r9 (обратно) к r8 папки хранилища (SVN: // репо/магистральный) связанный с текущим каталогом (первый «.»). Теперь выполните эти изменения в рабочей копии в текущем каталоге (второй «.»).

Там есть более удобный синтаксис, если вы просто возвращаясь одно изменение:

svn merge -c-8 . . #note the minus sign before the 8 

Если вы не используете SVN из командной строки, тыкать вокруг инструмента немного, вы уверены, найти что-то. Например, TortoiseSVN имеет удобные «отменить изменения из этой версии» при открытии журнала из рабочей копии.

+0

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

+0

В subversion нет такой вещи, как «локальные репозитории», есть только один репозиторий и рабочие * пользовательские копии *. Случайное удаление svn на части * рабочей копии *, которая не была зафиксирована, может быть отменена с помощью svn revert. – bendin

1

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

+0

Этот подход потеряет историческое соединение с случайно удаленным файлом и сохранит тот же файл (контент) дважды в репозитории, если вы не используете хотя бы svn 1.6 на сервере. – bendin

0

Я хотел бы сделать следующее:

Найти номер ревизии до удаления ... сделать svnadmin дамп -r1: [goodrevisionnumber здесь]> file.dump.

Затем создайте новый репозиторий «svnadmin create [имя репозитория]», а затем загрузите дамп в новый репозиторий. «Svnadmin нагрузка [newrepositoryname] < file.dump.

Затем проверить эту версию, и скопировать файлы из старого проверки в новую и фиксации.

+0

ли мы освобождаем все предыдущие версии? –

+0

nope ... когда вы делаете дамп, вы указываете из ревизии 1 правильную ревизию. когда вы выполняете нагрузку, он будет фактически совершать все предыдущие фиксации снова. – tardomatic

+0

это сделал! спасибо –

Смежные вопросы