SVN - Обновить полную локальную копию для версии Head

StackOverflow https://stackoverflow.com/questions/1173343

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Заранее спасибо,
Рейт

Это было полезно?

Решение

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

Из вашего вопроса, похоже, вы пробовали что -то вроде этого:

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

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

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

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

JR Hacker, проскальзывает и случайно удаляет B:

svn rm b
svn commit -m "oops"

Назовем полученный коммит R9.

Итак, в следующий раз, когда вы обновляете с репозитория,

svn update

trunk
    a

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

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

svn cp svn://repo/trunk/b@8 .
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: // repo/trunk), связанный с текущим каталогом (первый "."). Теперь выполните эти изменения в рабочей копии в текущем каталоге (второй ".").

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

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

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

Другие советы

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

Я бы сделал следующее:

Найдите номер ревизии перед удалением ... сделайте дамп Svnadmin -R1: [GoodRevisionNumber здесь]> file.dump.

Затем создайте новый репозиторий: «Svnadmin создать [имя репозитория]», а затем загрузите дамп в новый репозиторий. "Svnadmin Load [newRepositoryName] <file.dump.

Затем ознакомьтесь с этим пересмотром и скопируйте файлы со старой оформления в новую и совершающую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top