Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перемещение внутри репозитория SVN
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Управление проектами
cf7k
Всем здрасьте. smile.gif

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

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

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

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

Провел эксперимент:
I. создаю "по-нормальному" проект
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла

делаю ветвления:
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла

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

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

далее импортирую структуру trunk/branches/tags и переношу в нее исходный код.
вот собственно то что у меня вызвало закономерный вопрос:
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла

А где все мои старания, добытые непосильным трудом? smile.gif
Из картинок видно, что все что до ревизии 5 - ну никак не хотит отображаться.

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

Хотелось бы, чтоб все стало как будто бы изначально базировалось на trunk/branches/tags:
Нажмите для просмотра прикрепленного файла

Простите за "многа букафф". Спойлеры ставил вслепую, т.к. они у меня глючат...
scifi
Возможно, Вы перенос неправильно сделали. То есть просто добавили все файлы заново.
Если честно, я структурой trunk/branch/tag не пользовался. Однако, насколько я помню, в SVN это всего лишь папки. Просто в клиенте есть операции, которые ссылаются на эти папки. А внутри хранилища ветвления записываются как операции копирования. Причём копирование - это всего лишь ссылка на оригинал (не плодить же дублирующиеся данные).
Так вот, в черепахе я так и не нашёл в контекстном меню операцию копирования. Обхожу так: делаю переименование (а это копирование+удаление оригинала), затем откат, в окне отката выбираю восстановить удалённые, но оставить новую копию.
Что интересно, в обозревателе хранилища в контекстном меню такая операция есть.
Так что советую попробовать трюк с переименованием.
cf7k
Цитата(scifi @ Aug 31 2010, 17:45) *
Возможно, Вы перенос неправильно сделали. То есть просто добавили все файлы заново.
??? Не осознал...
Я делал в черепашьем repo-browser'е (именно в нем, а не в виндовом проводнике - т.е. операцию над репозиторием, а не с рабочей копией) - просто схватил все каталоги исходных кодов и перетащил в каталог trunk.

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

Цитата(scifi @ Aug 31 2010, 17:45) *
...Так что советую попробовать трюк с переименованием.
Всё бы замечательно, да вот только чтобы что-то переименовать - надо это что-то иметь. В данном случае подразумевается каталог с пустым именем - т.е. его не существует. Его в trunk не переименовать.

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

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

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

Может есть какой "грязный хак"? smile.gif
cf7k
Ура!!! нашел!!!

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.
Еще надо ручками в черепахе убить закэшированные хранилища! А то кровушки оно попьёт!
des00
только что проверил, у меня при копировании файлов история сохраняется, использую TortoiseSVN 1.6.7, Build 18415
cf7k
Может я что-то не так делал или неправильно поставил себе задачу... допускаю... Но что в данном случае означает при копировании, и файлов?
Мне не нужно было ничего копировать - я переносил внутри репозитория "назад во времени". Потому так подробно расписал проблему для минимизации вероятности неправильного понимания.

TortoiseSVN 1.6.10, Сборка 19898.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.