cf7k 0 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба Всем здрасьте. :) пользуемая софтина: svn + черепаха Имею некоторый проект, который долго и муторно пилится и хранится всё это под SVN'ом. Изначально я ставил SVN чтоб не плодить много бэкапных копий - чтоб не задумываться "а не потер ли я чего за зря". Соответственно, по неопытности, структурой trunk/branches/tags не заморачивался - все складывал в корень репозитория. Ныне же возникла потребность поддерживать старые аппаратные версии и пилить новые. До некоторого количества терпения пилил всё в одном путем макропереключений в исходном коде, но код стал распухать из-за одновременного присутствия условий компиляции для всех аппаратных версий. Вот я и дошел до необходимости сделать "по-нормальному". Собственно, возникла проблемка. Создаю в имеющемся репозитории папки trunk/branches/tags, переношу в черепашьем repo-browser'е все свои исходники в trunk, делаю branches и т.д. но вся история до переноса более в логе не показывается. Вопрос 1: оно так должно быть и я чего-то не понимаю, или это баг? Вопрос 2: как сделать так, чтоб вся предыстория отображалась? Провел эксперимент: I. создаю "по-нормальному" проект делаю ветвления: Всё нормально. II. моделирую свою ситуацию - сначала создаю в корне проект, правлю его, и далее уже занимаюсь ветками далее импортирую структуру trunk/branches/tags и переношу в нее исходный код. вот собственно то что у меня вызвало закономерный вопрос: А где все мои старания, добытые непосильным трудом? :) Из картинок видно, что все что до ревизии 5 - ну никак не хотит отображаться. Переключаться на корневой каталог репозитория - не кошерно(хотя, вроде, все комментарии изначально привязывались к корню) - тогда в каталог проекта вытаскивается все что есть в репозитории, граф ревизий оно всё равно нормально не строит, а лог, соответственно, отображает для всех аппаратных версий в порядке добавления правок: Хотелось бы, чтоб все стало как будто бы изначально базировалось на trunk/branches/tags: Простите за "многа букафф". Спойлеры ставил вслепую, т.к. они у меня глючат... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба Возможно, Вы перенос неправильно сделали. То есть просто добавили все файлы заново. Если честно, я структурой trunk/branch/tag не пользовался. Однако, насколько я помню, в SVN это всего лишь папки. Просто в клиенте есть операции, которые ссылаются на эти папки. А внутри хранилища ветвления записываются как операции копирования. Причём копирование - это всего лишь ссылка на оригинал (не плодить же дублирующиеся данные). Так вот, в черепахе я так и не нашёл в контекстном меню операцию копирования. Обхожу так: делаю переименование (а это копирование+удаление оригинала), затем откат, в окне отката выбираю восстановить удалённые, но оставить новую копию. Что интересно, в обозревателе хранилища в контекстном меню такая операция есть. Так что советую попробовать трюк с переименованием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cf7k 0 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба Возможно, Вы перенос неправильно сделали. То есть просто добавили все файлы заново.??? Не осознал... Я делал в черепашьем repo-browser'е (именно в нем, а не в виндовом проводнике - т.е. операцию над репозиторием, а не с рабочей копией) - просто схватил все каталоги исходных кодов и перетащил в каталог trunk. И простым командным svn move тоже получал аналогичный результат. ...Так что советую попробовать трюк с переименованием.Всё бы замечательно, да вот только чтобы что-то переименовать - надо это что-то иметь. В данном случае подразумевается каталог с пустым именем - т.е. его не существует. Его в trunk не переименовать. Весь вопрос в том чтобы всё что есть (все исходники) перенести в подкаталог в репозитории и при этом чтоб история тоже была бы перенесена, а она, видимо, привязана к каталогу в котором сохранялись правки. Мне почему-то кажется, что там делается Copy (создание ветки) и потом Delete оригинала. В результате новая ветка получает новую жизнь (и соответственно пустую историю), а старая - убивается (вместе с историей). Пробовал отзеркалить репозиторий в другой, но в подкаталог trunk. Не даёт. Может есть какой "грязный хак"? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cf7k 0 1 сентября, 2010 Опубликовано 1 сентября, 2010 · Жалоба Ура!!! нашел!!! 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 25 6 сентября, 2010 Опубликовано 6 сентября, 2010 · Жалоба только что проверил, у меня при копировании файлов история сохраняется, использую TortoiseSVN 1.6.7, Build 18415 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cf7k 0 6 сентября, 2010 Опубликовано 6 сентября, 2010 · Жалоба Может я что-то не так делал или неправильно поставил себе задачу... допускаю... Но что в данном случае означает при копировании, и файлов? Мне не нужно было ничего копировать - я переносил внутри репозитория "назад во времени". Потому так подробно расписал проблему для минимизации вероятности неправильного понимания. TortoiseSVN 1.6.10, Сборка 19898. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться