Subversion: Могу ли я проверить, изменить, а затем сделать ветку?

Я выполнил извлечение из своей магистрали в локальный DIR и сделал там множество локальных изменений. Теперь я не хочу фиксировать его обратно в ствол, а лучше сделаю ветку из этой локальной версии. Это возможно?

Могу я просто скопировать транк в ветку, а потом cd DIR и svn switch в ветку?

ОБНОВЛЕНИЕ: спасибо за ответы, все заработало! Подводя итог этапам:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(обратите внимание на точки)


person Frank    schedule 20.08.2009    source источник
comment
Да, ты можешь. Я использую tortoiseSVN, и вы можете это сделать.   -  person Nick    schedule 21.08.2009
comment
Я обнаружил слишком много конфликтов при использовании svn switch, поэтому решил проверить новую копию с new-branch-URL после svn copy.   -  person fikr4n    schedule 17.03.2013


Ответы (4)


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

svn copy working_directory url_to_branch
person wierob    schedule 20.08.2009

Книга SVN (http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create) не рекомендует создавать ветку из локальной рабочей копии.

Хотя также возможно создать ветку, используя svn copy для дублирования каталога в рабочей копии, этот метод не рекомендуется. На самом деле это может быть довольно медленно! Копирование каталога на стороне клиента является операцией линейного времени, поскольку фактически необходимо дублировать каждый файл и подкаталог в этом каталоге рабочей копии на локальном диске.

Вместо этого сначала создайте ветку, а затем используйте команду svn switch, чтобы вы могли зафиксировать свои изменения. Если ваша рабочая копия значительно устарела со стволом, добавьте «@REV» к исходному URL-адресу, где «REV» - это версия вашей рабочей копии, о которой сообщил svn info.

Однако копирование каталога на сервере - это операция с постоянным временем, и большинство людей создают ветки именно так.

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."
person Lucas    schedule 20.09.2011
comment
Спасибо за этот ответ. Это лучшее решение, поскольку оно поддерживает историю изменений. - person evanflash; 21.01.2012
comment
Означает ли это, что если бы у меня были изменения в моей локальной рабочей копии, я мог бы сделать svn copy <trunk-URL> <newBranch-URL>, чтобы скопировать ствол в новую ветку на сервере svn, а затем использовать svn switch в моей рабочей копии, чтобы переключиться на новую ветку без потери каких-либо изменений? Или переключатель убьет мои незафиксированные измененные файлы? - person Kasapo; 14.09.2012
comment
@Kasapo, да, верно. а также отметьте, если вы устарели с багажником; если это так, добавьте @REV к исходному URL-адресу, как я уже отмечал, чтобы после переключения на ветку только ваши локальные изменения отображались как различия. - person Lucas; 08.11.2012
comment
Позвольте мне просто добавить очень полезную ссылку, которая более подробно объясняет решение Лукаса: svnbook.red-bean.com/en/1.6/svn.branchmerge.switchwc.html (см. информационное поле внизу). Это действительно самое чистое и удобное решение для создания ветки из локальных модификаций. - person Spiros; 14.08.2014

В моем SVN-клиенте: TortoiseSVN достаточно:

  • щелкните правой кнопкой мыши верхний каталог, который я хочу ветвиться
  • в "To URL" выберите директорию филиала в вашем репозитории
  • в рамке «Создать копию в репозитории из:» выберите «Рабочая копия»

Выполнено :)

Это похоже на копирование локальной версии на указанный URL-адрес репозитория.

person twk    schedule 20.08.2009

Да, это можно сделать с помощью командной строки SVN или tortoiseSVN.

Вы должны указать свою рабочую копию SVN как src и вашу новую ветку как место назначения

svn copy <file/path/to/working/copy> <URL/TO/REPOSITORY/BRANCH>

команда.

В TortoiseSVN просто укажите на свою рабочую копию, выберите «Ветвь / тег» из контекстного меню и выберите «Рабочая копия» в разделе «Создать копию в репозитории из:»

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

person Peter Parker    schedule 21.08.2009