Как мне создать ветку в SVN?
Создайте новую ветку с помощью команды svn copy
следующим образом:
$ svn copy svn+ssh://host.example.com/repos/project/trunk \
svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
-m "Creating a branch of project"
--parents
option with svn copy
!
по какой-то причине я использовал этот cmd, и он не работал, но когда я изменил svn + ssh на просто https, он сработал. Я что-то не так сделал? в чем смысл svn + ssh? Спасибо!
сначала вам нужно создать новый каталог в своей ветке -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "сделать каталог ветвей для хранения всех веток"
Если я опущу параметр -m
, он будет выглядеть как svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist
. В -m
написано svn: E205009: Local, non-commit operations do not take a log message or revision properties
. (Я заменил адреса, но они существуют, за исключением, ofc, нового каталога ветки и всего пути + url, который SVN по какой-то причине слил в ошибке).
Хорошо, ответ ниже сработал. Поскольку, я полагаю, svn cp
== svn copy
, часть svn+ssh
в этом ответе неверна, она не работает (вызывает указанную выше ошибку ↑).
Обычно вы копируете его в svn + ssh: //host.example.com/repos/project/branches/mybranch, чтобы вы могли сохранить несколько веток в репозитории, но ваш синтаксис действителен.
Вот несколько советов по как настроить макет репозитория.
Если вы даже планируете объединить свою ветку, я настоятельно рекомендую вам взглянуть на это:
Я слышал, что Subversion 1.5 встраивает больше средств отслеживания слияния, но у меня нет в этом опыта. Мой проект находится на 1.4.x, а svnmerge.py спасает жизнь!
Разветвлению в Subversion способствует очень легкая и эффективная функция копирования.
Ветвление и тегирование практически одинаковы. Просто скопируйте всю папку из репозитория в другое место репозитория с помощью команды svn copy
.
В основном это означает, что копирование папки подразумевается по соглашению - будь то резервная копия, тег, ветка или что-то еще. В зависимости от того, как вы хотите думать о вещах (обычно в зависимости от того, какой инструмент SCM вы использовали в прошлом), вам необходимо настроить структуру папок в своем репозитории для поддержки вашего стиля.
Общие стили должны иметь группу папок в верхней части вашего репозитория под названием tags
, branches
, trunk
и т.д., что позволяет вам копировать весь ваш trunk
(или подмножества) в папки tags
и / или branches
. Если у вас более одного проекта, вы можете воспроизвести такую структуру для каждого проекта:
Чтобы привыкнуть к этой концепции, может потребоваться некоторое время, но она работает - просто убедитесь, что вы (и ваша команда) четко понимаете соглашения, которые вы собираетесь использовать. Также неплохо иметь хорошее соглашение об именах - что-то, что говорит вам, почему ветка / тег была создана и подходит ли она по-прежнему, - подумайте о способах архивирования устаревших ветвей.
"svn copy" имеет то преимущество, что он сохраняет историю, предшествующую ветвлению. Копирование в другой каталог вручную не будет.
Также обратите внимание, что обычно плохая идея помечать подкаталоги «trunk» или разветвлять их. Это затрудняет отслеживание того, какой подкаталог был разветвлен, и большинство инструментов запутаются в этих ветвях (например, переключение ветвей будет означать изменение структуры каталогов WC, что запутает IDE и инструменты сборки). Просто всегда ветка «ствол».
@Will На самом деле svn cp
использует дешевые копии, он действительно нет копирует фактические файлы во время ветвления. См. svnbook.red-bean.com/en/1.1/ch04s02.html
Предположим, вы хотите создать ветку из имени ствола (как «ТЕСТ»). затем используйте:
svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
svn cp /trunk/ /branch/NEW_Branch
Если у вас есть некоторые локальные изменения в магистрали, используйте Rsync
для синхронизации изменений.
rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
Нет необходимости использовать rsync
таким образом. svn cp
также скопирует любые локальные изменения.
@KevinPanko Не будет копировать незафиксированные изменения.
Есть, подтверждено svn, версия 1.8.5
Мне интересно об этом. Это кажется самым простым вариантом, и, насколько мне известно, это то, что я делал, когда работал с SVN 3 года назад. Но в чем разница между этим и теми, которые работают напрямую с URL-адресами сервера?
@KevinPanko Знаете ли вы, копирует ли он также и вновь созданные файлы?
Главный совет для новых пользователей SVN; это может немного помочь в быстром получении правильных URL-адресов.
Запустите svn info
, чтобы отобразить полезную информацию о текущей извлеченной ветви.
URL-адрес должен (если вы запустите svn в корневой папке) предоставить вам URL-адрес, с которого вам нужно скопировать.
Также, чтобы переключиться на только что созданную ветку, используйте команду svn switch
:
svn switch http://my.repo.url/myrepo/branches/newBranchName
Вы также можете использовать ^ вместо корня репозитория
Если ваше репо доступно через https, вы можете использовать эту команду для перехода ...
svn copy https://host.example.com/repos/project/trunk \
https://host.example.com/repos/project/branches/branch-name \
-m "Creating a branch of project"
Ниже приведены шаги по созданию ответвления из ствола с помощью TortoiseSVN на компьютере с Windows. Очевидно, что для этого необходимо установить клиент TortoiseSVN.
Затем используйте
svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .
(если вы хотите переключить текущую проверку на новую ветку) илиsvn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH
(если вы хотите иметь новую ветку в отдельном каталоге), чтобы начать работу над вновь созданной веткой.