如何创建分支?


Answers:


349

Subversion中的分支通过非常轻便高效的复制工具而得以实现。

分支和标记实际上是相同的。只需使用svn copy命令将存储库中的整个文件夹复制到存储库中的其他位置。

基本上,这意味着按照惯例,复制文件夹的含义-无论是备份,标签,分支还是其他。根据您对事物的看法(通常取决于您过去使用的SCM工具),您需要在存储库中设置一个文件夹结构来支持您的样式。

常见的款式在你的仓库顶部叫有一堆文件夹tagsbranchestrunk,等等-这允许您在整个复制trunk(或子集)进入tags和/或branches文件夹。如果您有多个项目,则可能要在每个项目下复制这种结构:

可能需要一段时间才能习惯该概念-但它确实有效-只要确保您(和您的团队)对将要使用的约定清楚。拥有良好的命名约定也是一个好主意-可以告诉您创建分支/标记的原因以及是否仍然合适-可以考虑将过时的分支归档。


211
“ svn复制”的优点是它将保留分支之前的历史记录。手动复制到另一个目录不会。
WhyNotHugo 2010年

5
另请注意,标记或分支“ trunk”的子目录通常是一个坏主意。这使得很难跟踪到哪个子目录被分支,并且大多数工具将被这些分支弄糊涂(例如,切换分支将意味着WC更改的目录结构,这会混淆IDE和构建工具)。只是总是分支“干线”。
sleske

1
@Will其实svn cp使用廉价的拷贝,它并没有分支中复制的实际文件。参见svnbook.red-bean.com/en/1.1/ch04s02.html
杨致远

607

使用以下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"

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(如果要在单独的目录中拥有新分支)开始在新创建的分支上工作。
JakubNarębski2012年

3
注意:在某些情况下,您需要将--parentsoption与svn copy!一起使用。
JakubNarębski2012年

1
由于某种原因,我使用了此cmd,但它没有起作用,但是当我将svn + ssh更改为https时,它起作用了。我做错了吗?svn + ssh是什么意思?谢谢!
阿维尔(Aviel Gross)

您必须首先在分支中创建一个新目录-> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m“使分支目录包含所有分支”
Silvio Troia

如果我忽略该-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,新的分支目录以及SVN由于某种原因在错误中合并的整个path + url)
Hi-Angel

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它不会复制未提交的更改。
Parag Bafna 2015年

4
确实,并通过svn版本1.8.5确认
Kevin Panko

我对此很疑惑。这似乎是最简单的选择,AFAI记得这是我三年前使用SVN时所做的。但是,这与直接使用服务器网址的网址有什么区别?
oligofren

@KevinPanko您知道它是否还会复制新创建的文件吗?
约翰·汉密尔顿


14

通常,您会将其复制到svn + ssh://host.example.com/repos/project/branches/mybranch,以便可以在存储库中保留多个分支,但是语法是有效的。

这是有关如何设置存储库布局的一些建议。


13

SVN新用户的最佳技巧;这可能有助于快速获取正确的网址。

svn info以显示有关当前已检出分支的有用信息。

该URL应该(如果您在根文件夹中运行svn)为您提供了需要复制的URL。

另外,要切换到新创建的分支,请使用以下svn switch命令:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
您也可以使用^代替存储库根目录
chim 2015年

11

如果您甚至打算合并分支,我强烈建议您看一下:

Svnmerge.py

我听说Subversion 1.5内置了更多的合并跟踪功能,对此我没有任何经验。我的项目在1.4.x上,而svnmerge.py可以挽救生命!


6
  • 在当前项目之外创建一个新文件夹。您可以给它起任何名字。(示例:您有一个名为“ Customization”的项目的结帐。它有许多项目,例如“ Project1”,“ Project2”...。并且您想创建“ Project1”的分支。因此,首先打开“自定义”,右键单击并创建一个新文件夹,并将其命名为“ Project1Branch”)。
  • 右键单击“ Myproject1”。...TortoiseSVN->分支/标签。
  • 选择工作副本。
  • 打开浏览器...。仅在“至URL”上平行。
  • 选择自定义.....右键单击,然后添加文件夹。并浏览您创建的文件夹。这是“ Project1Branch”。现在单击确定按钮添加。
  • 签出这个新的分支。
  • 再次转到项目要创建的分支。右键单击TorotoiseSVN->分支/标签。然后选择工作副本。您可以将URL作为您的分支名称。例如{您的IP地址/ svn / AAAA / Customization / Project1Branch}。并且您可以在URL中设置名称,以便仅使用该名称创建文件夹。类似于{您的IP地址/ svn / AAAA /自定义/ Project1Branch / MyProject1Branch}。
  • 按确定按钮。现在您可以看到日志...您的工作副本将存储在您的分支机构中。
  • 现在您可以签出...,让您享受工作。:)

-1

以下是在Windows计算机中使用TortoiseSVN从中继创建分支的步骤。显然,这需要安装TortoiseSVN客户端。

  1. 右键单击本地Windows计算机上已更新的中继
  2. 选择TortoiseSVN
  3. 点击分支/标签
  4. 在SVN信息库中选择“到”路径。请注意,目标URL根据给定的路径和分支名称进行更新
  5. 不要在资源库浏览器的分支内创建文件夹
  6. 添加分支路径。例如,分支机构/
  7. 添加有意义的日志消息以供参考
  8. 单击确定,这将在本地系统上创建新文件夹
  9. 签出创建到新文件夹中的分支
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.