SVN создает магистральную директорию в существующем хранилище - PullRequest
45 голосов
/ 06 декабря 2008

Я работаю над проектом, который не имеет структуры каталогов trunk / branch / tags - т.е. все находится в корне репозитория SVN.

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

Каков наилучший способ сделать это?

Первое, что я рассмотрел, было

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

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

Спасибо.

Ответы [ 6 ]

16 голосов
/ 02 декабря 2014

У меня была точно такая же проблема, и я решил ее, просмотрев несколько разных страниц (включая эту). Вот мое решение:

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

10 голосов
/ 06 декабря 2008

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

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

3 голосов
/ 08 июля 2010

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

1 голос
/ 19 января 2018

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

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

1 голос
/ 03 декабря 2012

Здесь описывается использование метода svn + ssh для создания папки с транками в корне svn в терминале unix. «имя проекта» является корневым «Идентификатором» при создании проекта в SVN:

svn mkdir svn+ssh://username@host/projectname/trunk -m "Create the trunk folder"
0 голосов
/ 06 декабря 2008

Возможно, вы захотите взглянуть на инструмент svnadmin.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...