SVN создает магистральный каталог в существующем репозитории

Я работаю над проектом, в котором нет структуры каталогов ствола / веток / тегов, т.е. все находится в корне репозитория svn.

Я хотел бы создать магистральный каталог и в корневом каталоге и переместить все, что находится в корневом каталоге, в новый магистральный каталог.

Как лучше всего это сделать?

Первое, что я подумал, было

svn mkdir trunk
(for each file or directory that is not called trunk: )
svn mv FILEorDIR trunk/

Но это эффективно удаляет каждый файл, а затем добавляет его снова. Есть ли способ лучше?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
46
0
63 897
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы можете изучить инструмент svnadmin.

Честно говоря, я не пробовал это раньше, и вы, вероятно, получите ответ от того, кто пробовал, но вы можете работать примерно так:

У вас должна быть возможность запустить новый репозиторий, создать в нем «магистральный» каталог, а затем сбросить свой предыдущий репозиторий в «ствол».

Ответ принят как подходящий

Это похоже на то, как я делал это раньше. Ваше решение фактически копии каждый файл, а затем удаляет оригинал. Из-за того, как Subversion реализует копии, история каждого файла сохраняется.

После этого вы можете указать существующие кассы в новом месте с помощью svn switch.

вы можете дать точную команду для svn switch? Кроме того, есть ли способ принудительно отключить обновление до последней версии в рабочей копии, в которой он запущен?

Vijay Dev 02.07.2010 17:44

@Vijay Dev: Я рекомендую svn switch документация для получения полной информации.

Greg Hewgill 03.07.2010 01:44

Если вы используете eclipse IDE и Subclipse для SVN, вы можете продолжить и создать папки в SVN и переместить все файлы / каталог из корневого каталога в каталог магистрали, а затем проверить ProjectName / trunk в рабочем пространстве eclipse ...

Кроме того, если вы собираетесь скопировать в чистый репозиторий (тот, в котором не зарегистрирован ни один проект, поэтому в нем нет структуры ствола / ветвей / тегов), в Eclipse вы можете создать структуру ствола / ветвей / тегов с помощью Репо> Новое> Структура проекта ...> Монолитный. После этого просто скопируйте / вставьте все элементы из исходного репо.

Saran 06.04.2012 15:28

Здесь дается способ использования метода 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 для хорошей меры :)

кажется лучшим ответом, чем тот, который был выбран

Mike D 03.06.2015 05:30

Старый пост, но у меня тоже была такая же проблема со всеми моими репозиториями в корне, а не в стволах. Это представляло проблему при попытке выполнить простую команду git svn clone. После нескольких часов проб и ошибок это было просто:

git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.

Я сам делал это несколько раз и узнал следующее: если вы хотите сохранить историю предыдущего корневого каталога SVN + сохранить все свойства SVN (например, игнорировать), вы должны сделать это следующим образом. Примечание: я сделал все это с помощью TortoiseSVN, потому что это очень просто. Но вы также можете добиться успеха с командной строкой. Ниже вы найдете описание, как это можно сделать и с помощью интерфейса командной строки.

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

Пример репо: / svn / мой_проект

Шаги для TortoiseSVN:

  1. Переименовать текущий каталог проекта /svn/my_project в транк /svn/trunk
  2. Создавать новый каталог /svn/my_project
  3. Двигаться/svn/trunk - /svn/my_project
  4. Выключатель рабочие копии на новый путь. Установите флажок "Родословная Ingore".
  5. Расслабиться

Шаги для CLI (не проверено!):

  1. Копировать каталог в новый каталог /svn/trunk/
  2. Удалить старый каталог /svn/my_project/
  3. Копировать из каталога /svn/trunk/ в новый каталог /svn/my_project/trunk
  4. Удалить каталог /svn/trunk/
  5. Выключатель рабочие копии в новый каталог

Другие вопросы по теме