Перейти к содержанию
    

Перемещение внутри репозитория SVN

Всем здрасьте. :)

 

пользуемая софтина: svn + черепаха

 

Имею некоторый проект, который долго и муторно пилится и хранится всё это под SVN'ом. Изначально я ставил SVN чтоб не плодить много бэкапных копий - чтоб не задумываться "а не потер ли я чего за зря". Соответственно, по неопытности, структурой trunk/branches/tags не заморачивался - все складывал в корень репозитория.

Ныне же возникла потребность поддерживать старые аппаратные версии и пилить новые. До некоторого количества терпения пилил всё в одном путем макропереключений в исходном коде, но код стал распухать из-за одновременного присутствия условий компиляции для всех аппаратных версий. Вот я и дошел до необходимости сделать "по-нормальному".

 

Собственно, возникла проблемка.

Создаю в имеющемся репозитории папки trunk/branches/tags, переношу в черепашьем repo-browser'е все свои исходники в trunk, делаю branches и т.д. но вся история до переноса

более в логе не показывается.

 

Вопрос 1: оно так должно быть и я чего-то не понимаю, или это баг?

Вопрос 2: как сделать так, чтоб вся предыстория отображалась?

 

Провел эксперимент:

I. создаю "по-нормальному" проект

post-15227-1283203095_thumb.pngpost-15227-1283203128_thumb.png

 

делаю ветвления:

post-15227-1283203217_thumb.pngpost-15227-1283203261_thumb.png

 

Всё нормально.

 

II. моделирую свою ситуацию - сначала создаю в корне проект, правлю его, и далее уже занимаюсь ветками

post-15227-1283203669_thumb.pngpost-15227-1283203712_thumb.png

 

далее импортирую структуру trunk/branches/tags и переношу в нее исходный код.

вот собственно то что у меня вызвало закономерный вопрос:

post-15227-1283203620_thumb.pngpost-15227-1283203806_thumb.png

 

А где все мои старания, добытые непосильным трудом? :)

Из картинок видно, что все что до ревизии 5 - ну никак не хотит отображаться.

 

Переключаться на корневой каталог репозитория - не кошерно(хотя, вроде, все комментарии изначально привязывались к корню) - тогда в каталог проекта вытаскивается все что есть в репозитории, граф ревизий оно всё равно нормально не строит, а лог, соответственно, отображает для всех аппаратных версий в порядке добавления правок:

post-15227-1283204755_thumb.pngpost-15227-1283204768_thumb.png

 

Хотелось бы, чтоб все стало как будто бы изначально базировалось на trunk/branches/tags:

post-15227-1283203261_thumb.png

 

Простите за "многа букафф". Спойлеры ставил вслепую, т.к. они у меня глючат...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если честно, я структурой trunk/branch/tag не пользовался. Однако, насколько я помню, в SVN это всего лишь папки. Просто в клиенте есть операции, которые ссылаются на эти папки. А внутри хранилища ветвления записываются как операции копирования. Причём копирование - это всего лишь ссылка на оригинал (не плодить же дублирующиеся данные).

Так вот, в черепахе я так и не нашёл в контекстном меню операцию копирования. Обхожу так: делаю переименование (а это копирование+удаление оригинала), затем откат, в окне отката выбираю восстановить удалённые, но оставить новую копию.

Что интересно, в обозревателе хранилища в контекстном меню такая операция есть.

Так что советую попробовать трюк с переименованием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, Вы перенос неправильно сделали. То есть просто добавили все файлы заново.
??? Не осознал...

Я делал в черепашьем repo-browser'е (именно в нем, а не в виндовом проводнике - т.е. операцию над репозиторием, а не с рабочей копией) - просто схватил все каталоги исходных кодов и перетащил в каталог trunk.

 

И простым командным svn move тоже получал аналогичный результат.

 

...Так что советую попробовать трюк с переименованием.
Всё бы замечательно, да вот только чтобы что-то переименовать - надо это что-то иметь. В данном случае подразумевается каталог с пустым именем - т.е. его не существует. Его в trunk не переименовать.

 

Весь вопрос в том чтобы всё что есть (все исходники) перенести в подкаталог в репозитории и при этом чтоб история тоже была бы перенесена, а она, видимо, привязана к каталогу в котором сохранялись правки.

 

Мне почему-то кажется, что там делается Copy (создание ветки) и потом Delete оригинала. В результате новая ветка получает новую жизнь (и соответственно пустую историю), а старая - убивается (вместе с историей).

 

Пробовал отзеркалить репозиторий в другой, но в подкаталог trunk. Не даёт.

 

Может есть какой "грязный хак"? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ура!!! нашел!!!

 

svnadmin.exe dump ПУТЬ_К_РЕПОЗИТОРИЮ > d:\tmp.dump

 

удалить старый репозиторий (естественно, сначала попробовал на отдельном)

создать там же новый, но пустой

импортировать структуру trunk/branches/tags из какого-нить темпа. Можно и ручками в репозитории создать - но это лишние правки в нем появятся.

 

svnadmin.exe load ПУТЬ_К_РЕПОЗИТОРИЮ --force-uuid --parent-dir trunk < d:\tmp.dump

 

История сохраняется, граф ревизий черепаха рисует правильно, номера правок смещаются на +1 (за счет операции импорта структуры t/b/t), можно нормально создавать ветки.

 

Проблема решена.

 

update 02-09-2010 12:31msk.

Еще надо ручками в черепахе убить закэшированные хранилища! А то кровушки оно попьёт!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

только что проверил, у меня при копировании файлов история сохраняется, использую TortoiseSVN 1.6.7, Build 18415

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я что-то не так делал или неправильно поставил себе задачу... допускаю... Но что в данном случае означает при копировании, и файлов?

Мне не нужно было ничего копировать - я переносил внутри репозитория "назад во времени". Потому так подробно расписал проблему для минимизации вероятности неправильного понимания.

 

TortoiseSVN 1.6.10, Сборка 19898.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...