В загруженном хранилище SVN отсутствуют последние несколько ревизий - как это исправить? - PullRequest
3 голосов
/ 12 января 2010

Я сбросил свой репозиторий

svnadmin dump repos > repos.dump

тогда я загрузил его на новую машину

svnadmin load newrepos < repos.dump

и по окончании в новом хранилище отсутствуют последние несколько сотен ревизий.

Могу ли я проверить repos.dump, чтобы увидеть, не хватает ли ревизий? Могу ли я сбросить отсутствующие ревизии и загрузить их в новый репозиторий? Или я должен начать все заново?

Начинать с нуля было бы мучительно, так как хранилище имеет 3 ГБ, и мне нужно перехватить его через Интернет на умеренно низких скоростях!

РЕДАКТИРОВАТЬ: РЕШЕНО - ОШИБКА ОПЕРАТОРА!

Итак, я забыл, что я уже однажды перенес хранилище (из учетной записи 1 в учетную запись 2), и я никогда не удалял хранилище account1. У меня есть функция bash для быстрого подключения ssh к моим удаленным учетным записям, и она по умолчанию регистрирует меня в account1 (о котором я не думал), и, увидев хранилище, я решила, что все в порядке, и, следовательно, отправила дамп в account3 (снова используя псевдоним, чтобы я не заметил, что я был не в той учетной записи).

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

Но я смог использовать --incremental для переноса недостающих ревизий в новое место. Итак, все советы все же помогли.

Ответы [ 5 ]

4 голосов
/ 12 января 2010

Я бы предположил, что ваш дамп больше 4 ГБ (поскольку дампы не сохраняются с дельтами по умолчанию, поэтому они могут быть намного больше, чем репо), и на некотором этапе процесса передачи дамп усекается до 4 ГБ, который является максимальным размером файла в некоторых файловых системах (и, возможно, в некоторых протоколах). Также возможно, что какой-то шаг процесса может обрезать его до 2 ГБ, в зависимости от используемого вами метода передачи файла.

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

Вместо того, чтобы начинать весь процесс заново, вы можете использовать опцию --incremental для svnadmin dump, чтобы создать инкрементный дамп, начиная с последней удачной ревизии, загруженной вами в новое хранилище. Загрузка инкрементного дампа в существующий репозиторий должна работать нормально. Вы бы сделали что-то вроде

svnadmin dump --incremental -r 1234:HEAD > repos.2.dump
# Transfer to new system
svnadmin load < repos.2.dump
1 голос
/ 13 января 2010

Лично я бы снова бросил это. Я полагаю, что наиболее вероятный ответ - ваш исходный дамп не был успешно завершен - вы видели какие-либо ошибки в командной строке после запуска дампа? Если вы хотите проверить сам дамп, посмотрите на это для некоторой помощи: http://www.troyhunt.com/2009/12/black-art-of-splitting-subversion.html

Другая вещь, которую вы могли бы рассмотреть, - это просто перенести исходное репо в целевое местоположение. Вы будете копировать сжатую версию ваших данных, поэтому процесс будет быстрее, чем копирование дампа (не уверен, что вы передали его в архив).

1 голос
/ 12 января 2010

Он должен записывать номера ревизий в командную строку во время выполнения дампа. Это то, что я получаю, даже когда вы перенаправляете файл, как вы.

Вы можете проверить сам файл и найти Revision-number:, чтобы увидеть, какие именно ревизии в нем.

1 голос
/ 12 января 2010

Чтобы убедиться, что все ревизии есть в вашем дамп-файле, grep для "Revision-number". Вы также можете открыть файл в текстовом редакторе, чтобы проверить наличие явных повреждений, но не сохраняйте его .

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

1 голос
/ 12 января 2010

Могу ли я проверить repos.dump, чтобы убедиться, что в нем отсутствуют версии?

Да. Есть такие строки, как

Revision-number: XYZ

в файле дампа.

Могу ли я сбросить отсутствующие ревизии и загрузить их в новый репозиторий?

Да. Вы можете использовать svnadmin load для фиксации ревизий в новом или существующем хранилище.

...