如何创建分支?

Posted

技术标签:

【中文标题】如何创建分支?【英文标题】:How do I create a branch? 【发布时间】:2010-09-05 08:20:17 【问题描述】:

如何在 SVN 中创建分支?

【问题讨论】:

【参考方案1】:

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

【讨论】:

接下来使用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(如果你想在单独的目录中有新分支)开始处理新创建的分支。 注意: 在某些情况下,您需要将 --parents 选项与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,新的分支目录,以及SVN由于某种原因合并到错误中的整个路径+url).【参考方案2】:

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

这里有一些关于how to set up your repository layout的建议。

【讨论】:

【参考方案3】:

如果你甚至打算合并你的分支,我强烈建议你看看这个:

Svnmerge.py

我听说 Subversion 1.5 构建了更多的合并跟踪,我没有这方面的经验。我的项目在 1.4.x 上,svnmerge.py 是救命稻草!

【讨论】:

【参考方案4】:

Subversion 中的分支是由一个非常轻量和高效的复制工具来促进的。

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

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

常见的样式是在存储库顶部有一堆文件夹,称为tagsbranchestrunk 等 - 允许您复制整个 trunk(或子集)进入tags 和/或branches 文件夹。如果您有多个项目,您可能希望在每个项目下复制这种结构:

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

【讨论】:

"svn copy" 的优点是它会保留分支之前的历史记录。手动复制到另一个目录不会。 另请注意,标记或分支“主干”的子目录通常不是一个好主意。这使得很难跟踪哪个子目录被分支,并且大多数工具会被这些分支混淆(例如切换分支将意味着 WC 的目录结构发生变化,这会混淆 IDE 和构建工具)。只是总是分支“主干”。 @Will 实际上svn cp 使用廉价副本,它确实在分支期间复制实际文件。见svnbook.red-bean.com/en/1.1/ch04s02.html【参考方案5】:

假设您想从主干名称创建一个分支(如“TEST”) 然后使用:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST

【讨论】:

【参考方案6】:
svn cp /trunk/ /branch/NEW_Branch

如果您在主干中有一些本地更改,请使用Rsync 同步更改

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch

【讨论】:

这种方式不需要使用rsyncsvn cp 还将复制任何本地更改。 @KevinPanko 它不会复制未提交的更改。 可以,用svn确认,版本1.8.5 我想知道这个。这似乎是最简单的选择,AFAI 记得,这是我 3 年前使用 SVN 时所做的。但是这和那些直接使用服务器 url 的有什么区别呢? @KevinPanko 你知道它是否也复制新创建的文件吗?【参考方案7】: 在当前项目之外创建一个新文件夹。你可以给它任何名字。 (例如:您有一个名为“Customization”的项目的结帐。它有很多项目,例如“Project1”、“Project2”......并且您想创建“Project1”的一个分支。所以首先打开“自定义”,右键单击并创建一个新文件夹并为其命名,“Project1Branch”)。 右键单击“Myproject1”....TortoiseSVN -> 分支/标签。 选择工作副本。 打开浏览器....就在“To URL”的平行右侧。 选择自定义.....右键单击然后添加文件夹。并浏览您创建的文件夹。这里是“Project1Branch”。现在单击“确定”按钮进行添加。 结帐这家新银行。 再次转到您要创建的项目分支。右键单击 TorotoiseSVN -> 分支/标签。然后选择工作副本。您可以将 URL 作为您的分支名称。比如你的 IP 地址/svn/AAAA/Customization/Project1Branch。您可以在 URL 中设置名称,以便它只创建具有此名称的文件夹。 比如你的 IP 地址/svn/AAAA/Customization/Project1Branch/MyProject1Branch。 按确定按钮。现在您可以看到日志...您的工作副本将存储在您的分支中。 现在您可以结账了……让您享受您的工作。 :)

【讨论】:

【参考方案8】:

SVN 新用户的重要提示;这可能有助于快速获取正确的 URL。

运行svn info 以显示有关当前签出分支的有用信息。

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

同样要切换到新创建的分支,使用svn switch命令:

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

【讨论】:

您也可以使用 ^ 代替 Repository Root【参考方案9】:

如果你的 repo 可以通过 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"

【讨论】:

【参考方案10】:

以下是在 Windows 机器上使用 TortoiseSVN 从主干创建分支的步骤。这显然需要安装 TortoiseSVN 客户端。

    从本地 Windows 机器右键单击更新的主干 选择 TortoiseSVN 点击分支/标签 选择 SVN 存储库中的 To 路径。请注意,目标 URL 会根据给定的路径和分支名称进行更新 不要在存储库浏览器的分支内创建文件夹 添加分支路径。例如,分支/ 添加有意义的日志消息供您参考 单击确定,这将在本地系统上创建新文件夹 签出在新文件夹中创建的分支

【讨论】:

以上是关于如何创建分支?的主要内容,如果未能解决你的问题,请参考以下文章

git@osc 如何创建新分支

GIT04_分支概述查看创建切换合并分支代码冲突如何定位解决

如何从 master 创建发布分支,不包括已经合并到 master 中的特定分支

从git中的现有分支创建新分支时如何不触发管道?

如何正确创建分支 GIT

创建分支时如何获取提交[重复]