Как мне создать ветку?

Ответы:

349

Ветвление в Subversion облегчается очень легким и эффективным средством копирования.

Ветвление и пометка фактически одинаковы. Просто скопируйте всю папку в хранилище куда-нибудь в хранилище, используя svn copyкоманду.

По сути, это означает, что условно копирование папки означает - будь то резервное копирование, тег, ветвь или что-то еще. В зависимости от того, как вы хотите думать о вещах (обычно в зависимости от того, какой инструмент SCM вы использовали в прошлом), вам нужно настроить структуру папок в вашем хранилище для поддержки вашего стиля.

Общие стили должны иметь кучу папок в верхней части хранилища под названием tags, branches, trunkи т.д. - что позволяет копировать все ваши trunk(или суб-наборы) в tagsи / или branchesпапку. Если у вас более одного проекта, вы можете повторить такую ​​структуру в каждом проекте:

Может потребоваться некоторое время, чтобы привыкнуть к этой концепции - но она работает - просто убедитесь, что вы (и ваша команда) четко понимаете соглашения, которые вы собираетесь использовать. Также неплохо иметь хорошее соглашение об именах - что-то, что говорит вам, почему была сделана ветка / тег и является ли она по-прежнему уместной, - рассмотрите способы архивации ветвей, которые устарели.

Ронни
источник
211
«svn copy» имеет то преимущество, что сохраняет историю, предшествующую ветвлению. Копирование в другой каталог вручную не будет.
WhyNotHugo
5
Также обратите внимание, что обычно плохая идея помечать или разветвлять подкаталоги «trunk». Это затрудняет отслеживание того, какой подкаталог был разветвлен, и большинство инструментов будут смущены этими ветвями (например, переключение ветвей будет означать структуру каталогов изменений WC, что приведет к путанице в IDE и инструментах сборки). Просто всегда ветка "ствол".
Слёске
1
@Will На самом деле svn cpиспользует дешевые копии, он не копирует реальные файлы во время ветвления. См. Svnbook.red-bean.com/en/1.1/ch04s02.html
Уолти Йенг
608

Создайте новую ветку, используя 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"
Sparkes
источник
24
Затем используйте 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(если вы хотите иметь новую ветку в отдельном каталоге), чтобы начать работу над вновь созданной веткой.
Якуб Наребски
3
Примечание: в некоторых случаях вам нужно будет использовать--parentsопцию сsvn copy!
Якуб Наребски
1
По какой-то причине я использовал этот 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. (Я заменил адреса, но они существуют, за исключением оф, нового каталога филиала и полного пути + URL, который SVN по какой-то причине слил в ошибку) .
Привет, Ангел,
33

Если ваше репо доступно через 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"
Дейв
источник
26
svn cp /trunk/ /branch/NEW_Branch

Если у вас есть некоторые локальные изменения в транке, используйте Rsyncдля синхронизации изменений

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
Параг Бафна
источник
2
Нет необходимости использовать rsyncтаким образом. svn cpтакже скопирует любые локальные изменения.
Кевин Панко
@KevinPanko Он не будет копировать незафиксированные изменения.
Параг Бафна
4
Это подтверждается SVN, версия 1.8.5
Кевин Панко,
Мне интересно об этом. Это кажется самым простым вариантом, и AFAI помнит, это то, что я сделал, когда работал с SVN 3 года назад. Но в чем разница между этим и теми, которые работают непосредственно с URL-адресами сервера?
oligofren
@KevinPanko Знаете ли вы, он также копирует недавно созданные файлы?
Джон Гамильтон
16

Предположим, вы хотите создать ветку из имени транка (как «TEST»), а затем использовать:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
Чамли Идунил
источник
14

Обычно вы копируете его в svn + ssh: //host.example.com/repos/project/branches/mybranch, чтобы вы могли сохранить несколько веток в хранилище, но ваш синтаксис действителен.

Вот несколько советов о том, как настроить макет хранилища .

pix0r
источник
13

Главный совет для новых пользователей SVN; это может немного помочь с быстрым получением правильных URL.

Запустите svn infoдля отображения полезной информации о текущей извлеченной ветке.

URL должен (если вы запускаете svn в корневой папке) дать вам URL, с которого нужно скопировать.

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

svn switch http://my.repo.url/myrepo/branches/newBranchName
Хим
источник
3
Вы также можете использовать ^ вместо корня репозитория
chim
11

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

Svnmerge.py

Я слышал, что Subversion 1.5 создает больше отслеживания слияний, но у меня нет с этим опыта. Мой проект на 1.4.x и svnmerge.py спасает жизнь!

basszero
источник
6
  • Создайте новую папку за пределами вашего текущего проекта. Вы можете дать ему любое имя. (Пример: у вас есть заказ для проекта с именем «Customization». И у него есть много проектов, таких как «Project1», «Project2» .... И вы хотите создать ветку «Project1». Поэтому сначала откройте » Настройка ", щелкните правой кнопкой мыши и создайте новую папку и присвойте ей имя" Project1Branch ").
  • Щелкните правой кнопкой мыши на «Myproject1» .... TortoiseSVN -> Branch / Tag.
  • Выберите рабочую копию.
  • Откройте браузер .... Прямо справа от "To URL".
  • Выберите настройки ..... щелкните правой кнопкой мыши, затем выберите Добавить папку. и перейдите в папку, которую вы создали. Вот это «Project1Branch». Теперь нажмите кнопку ОК, чтобы добавить.
  • Оформите заказ на этот новый банч.
  • Снова зайдите в свой проект, какую ветку вы хотите создать. Щелкните правой кнопкой мыши TorotoiseSVN -> ветка / тег. Затем выберите рабочую копию. И вы можете дать URL-адрес в качестве названия вашей ветви. как {ваш IP-адрес / svn / AAAA / настройка / Project1Branch}. И вы можете установить имя в URL, чтобы он создавал папку только с этим именем. Как {Ваш IP-адрес / svn / AAAA / Настройка / Project1Branch / MyProject1Branch}.
  • Нажмите кнопку ОК. Теперь вы можете видеть логи в ... ваша рабочая копия будет храниться в вашей ветке.
  • Теперь вы можете пройти проверку ... и позволить вам наслаждаться своей работой. :)
Сону Гупта
источник
-1

Ниже приведены шаги по созданию ветви из ствола с использованием TortoiseSVN в Windows Machine. Очевидно, что для этого требуется клиент TortoiseSVN.

  1. Щелкните правой кнопкой мыши на обновленном сундуке с локальной машины Windows.
  2. Выберите TortoiseSVN
  3. Нажмите ветку / тег
  4. Выберите путь «К» в репозитории SVN. Обратите внимание, что целевой URL обновляется в соответствии с указанным путем и именем ветви
  5. Не создавайте папку внутри веток в браузере хранилища
  6. Добавьте путь веток. Например, гостиницы
  7. Добавить значимое сообщение журнала для вашей справки
  8. Нажмите Ok, это создаст новую папку в локальной системе
  9. Оформить заказ на созданную ветку в новую папку
Prashanth
источник