Я работаю над проектом, в котором нет структуры каталогов ствола / веток / тегов, т.е. все находится в корне репозитория svn.
Я хотел бы создать магистральный каталог и в корневом каталоге и переместить все, что находится в корневом каталоге, в новый магистральный каталог.
Как лучше всего это сделать?
Первое, что я подумал, было
svn mkdir trunk
(for each file or directory that is not called trunk: )
svn mv FILEorDIR trunk/
Но это эффективно удаляет каждый файл, а затем добавляет его снова. Есть ли способ лучше?
Спасибо.





Вы можете изучить инструмент svnadmin.
Честно говоря, я не пробовал это раньше, и вы, вероятно, получите ответ от того, кто пробовал, но вы можете работать примерно так:
У вас должна быть возможность запустить новый репозиторий, создать в нем «магистральный» каталог, а затем сбросить свой предыдущий репозиторий в «ствол».
Это похоже на то, как я делал это раньше. Ваше решение фактически копии каждый файл, а затем удаляет оригинал. Из-за того, как Subversion реализует копии, история каждого файла сохраняется.
После этого вы можете указать существующие кассы в новом месте с помощью svn switch.
Если вы используете eclipse IDE и Subclipse для SVN, вы можете продолжить и создать папки в SVN и переместить все файлы / каталог из корневого каталога в каталог магистрали, а затем проверить ProjectName / trunk в рабочем пространстве eclipse ...
Кроме того, если вы собираетесь скопировать в чистый репозиторий (тот, в котором не зарегистрирован ни один проект, поэтому в нем нет структуры ствола / ветвей / тегов), в Eclipse вы можете создать структуру ствола / ветвей / тегов с помощью Репо> Новое> Структура проекта ...> Монолитный. После этого просто скопируйте / вставьте все элементы из исходного репо.
Здесь дается способ использования метода svn + ssh для создания папки trunk в корне svn в терминале unix. "projectname" - это корневой "идентификатор" при создании проекта в svn:
svn mkdir svn+ssh://username@host/projectname/trunk -m "Create the trunk folder"
У меня была точно такая же проблема, и я решил ее, просмотрев несколько разных страниц (включая эту). Вот мое решение:
Примечание: Прежде чем начать, если вы планируете использовать svn switch, чтобы сохранить вашу рабочую копию и избежать повторной проверки репо, лучше всего убедиться, что ваша рабочая копия обновлена и не содержит незафиксированных изменений.
Приступим к решению ...
//REPO_URL = The URL for the repo on the SVN server.
//In my case it was https://IP_ADDRESS:PORT/svn/my_repo
//Make the trunk dir in the root of your SVN repo
svn mkdir REPO_URL/trunk -m "making trunk dir"
//Move everything from your root dir to your new trunk dir
svn move REPO_URL/A_FOLDER REPO_URL/trunk/A_FOLDER -m "moving folders to trunk"
svn move REPO_URL/ANOTHER_FOLDER REPO_URL/trunk/ANOTHER_FOLDER -m "blah"
svn move REPO_URL/A_FILE.TXT REPO_URL/trunk/A_FILE.TXT -m "moving files to trunk"
//Keep going until you've moved everything from your root dir to the trunk dir...
Итак, теперь на вашем сервере SVN все находится в папке магистрали. Сладкий!
Но мое репо составляет 60 ГБ и находится на удаленном сервере. Я бы предпочел не проверять это снова. svn switch позволит вам указать существующую рабочую копию в новый каталог trunk, чтобы вы могли продолжить работу с имеющейся у вас копией. Зайдите в корневую папку вашей рабочей копии и запустите svn switch REPO_URL/trunk --ignore-ancestry. Он должен сказать At revision X, где X - это ревизия после того, как вы переместили все ваши файлы из корневого каталога в каталог магистрали. Вот и все! Возможно, сделайте обновление SVN для хорошей меры :)
кажется лучшим ответом, чем тот, который был выбран
Старый пост, но у меня тоже была такая же проблема со всеми моими репозиториями в корне, а не в стволах. Это представляло проблему при попытке выполнить простую команду git svn clone. После нескольких часов проб и ошибок это было просто:
git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.
Я сам делал это несколько раз и узнал следующее: если вы хотите сохранить историю предыдущего корневого каталога SVN + сохранить все свойства SVN (например, игнорировать), вы должны сделать это следующим образом. Примечание: я сделал все это с помощью TortoiseSVN, потому что это очень просто. Но вы также можете добиться успеха с командной строкой. Ниже вы найдете описание, как это можно сделать и с помощью интерфейса командной строки.
Не забывайте добавлять соответствующие SVN-сообщения к каждому действию, чтобы потом вы знали, что было сделано красиво и чисто.
Пример репо: / svn / мой_проект
Шаги для TortoiseSVN:
/svn/my_project в транк /svn/trunk/svn/my_project/svn/trunk - /svn/my_projectШаги для CLI (не проверено!):
/svn/trunk//svn/my_project//svn/trunk/ в новый каталог /svn/my_project/trunk/svn/trunk/
вы можете дать точную команду для svn switch? Кроме того, есть ли способ принудительно отключить обновление до последней версии в рабочей копии, в которой он запущен?