如何在SVN中创建分支?

如何在SVN中创建分支?

0
额外 编辑
意见: 3

9 答案

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

以下是关于如何设置存储库布局的一些建议。

0
额外

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

Svnmerge.py

我听说Subversion 1.5构建了更多的合并跟踪功能,我对此没有经验。我的项目在1.4.x上,而svnmerge.py是一款救星!

0
额外

Subversion使得它很容易(有些人认为太容易)使用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"
0
额外
接下来使用 svn switch svn + ssh://host.example.com/repos/project/branches/NAME_OF_BR‌ ANCH。(如果您想将当前结账切换到新分支)或 svn checkout svn + ssh://host.example.com/repos/project/branches/NAME_OF_BR‌ ANCH (如果你想在分开的目录中有新的分支)开始在新创建的分支上工作。
额外 作者 Jakub Narębski,
在某些情况下,您需要使用 svn copy 选项来使用 - parents 码>!
额外 作者 Jakub Narębski,
由于某种原因,我使用了这个cmd,它没有工作,但是当我将svn + ssh改为https时,它确实有效。我做错了什么吗? svn + ssh的含义是什么?谢谢!
额外 作者 Aviel Gross,
回答我自己的问题,这是因为分支的目录已经存在。如果目标分支目录不存在,它就可以工作。
额外 作者 peedee,
我完成了这个 svn copy ,最后得到了一个像 ... / project / branches / my_new_branch / trunk /...的结构。我怎样才能避免在我的新分支中有另一个“主干”?
额外 作者 peedee,
只是在简单的部分挑剔。与git相比更容易? git branch -b branch_name
额外 作者 pellucide,
你必须首先在分支中创建一个新目录 - > svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m“使分支目录保存所有分支”
额外 作者 Silvio Troia,
好的,下面的答案工作。因为我猜这个答案中的 svn cp == svn copy ,该部分 svn + ssh 是错误的,它不起作用< (触发上述错误?)。
额外 作者 Hi-Angel,
如果省略 -m 选项,它就像 svn:E155010:Path'/home/constantine/someDirectory/svn+ssh:https:/myhost.com/s‌ vn / dir1 / dir2 / trunk / d&zwnj; ir3 / dir4 / dir5'不存在。用 -m 表示 svn:E205009:本地非提交操作不会接收日志消息或版本属性。 (我替换了地址,但它们确实存在,除了ofc,新的分支目录,以及由于某种原因合并在错误中的SVN的整个路径+ url)。
额外 作者 Hi-Angel,
“有些人觉得太容易了”,那应该是什么意思?为什么有人希望它变得更难?
额外 作者 deetz,

在Subversion中进行分支是由非常非常轻巧高效的复制工具来实现的。

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

基本上这意味着按照惯例,复制文件夹意味着什么 - 无论是备份,标记,分支还是重击。根据你想如何考虑事情(通常取决于你过去使用过哪个SCM工具),你需要在你的仓库中设置一个文件夹结构来支持你的风格。

常见的样式是在仓库顶部有一堆名为 tagsbranchestrunk 等的文件夹,它允许您将您的整个 trunk (或子集)复制到标记和/或分支文件夹中。如果您有多个项目,则可能需要在每个项目下复制这种结构:

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

0
额外
@inetphantom哈,我会给你的svn设施是轻如“在​​光思”,但效率不高!你说你自己的结果不是。衡量结果,而不是svn程序员的懒惰。
额外 作者 Will,
非常非常轻巧高效的复印设备。哈!不,复制实际文件非常重要,以及如何结束等待SVN回购结算的时间。 Git等非常非常轻巧高效,因为它们在创建分支时只复制引用。写入时复制。
额外 作者 Will,
还要注意,标记或分支“trunk”的子目录通常是一个糟糕的主意。这使得很难跟踪哪个子目录被分支,并且大多数工具会被这些分支弄糊涂(例如,切换分支将意味着WC的目录结构改变,这会混淆IDE和构建工具)。总是分支“树干”。
额外 作者 sleske,
@实际上这个设施很轻。并且效率也很高。结果不是。 GIT的设施很繁重,因为它计算很多,不仅仅是一个副本,但结果很轻,因为它没有拷贝所有东西的开销
额外 作者 inetphantom,
哇,这太可怕了。
额外 作者 shinzou,
“svn copy”的优点是它会在分支之前保留历史记录。手动复制到另一个目录不会。
额外 作者 WhyNotHugo,
“不,复制实际文件非常重要,你最终等待SVN回购等待几个小时。”这听起来相当惊人。你在使用SVN来管理一个大型项目吗?或者你是否试图通过WAN连接分支一个大型项目?我曾与很多大型SVN项目合作过,但从未等过几个小时才能完成分支。
额外 作者 AhiyaHiya,
@AhiyaHiya不管是什么情况,复制增量比实际的文件总是更好。三角洲的重量不能超过文件。单调乏味的程序繁琐的命令。
额外 作者 Winter,
@威尔,你其实不需要复制文件。在大多数情况下,您只需要svn copy svn:// server / trunk svn:// server / branch ,然后使用 svn switch svn:// server / branch 。这很快。
额外 作者 Alex Che,
@实际上, svn cp 使用便宜的副本,它在分支过程中复制实际文件。请参阅 svnbook.red-bean.com/en/1.1/ch04s02.html</一>
额外 作者 Walty Yeung,
svn cp /trunk/ /branch/NEW_Branch

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

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
0
额外
@KevinPanko它不会复制未提交的更改。
额外 作者 Parag Bafna,
我想知道这件事。这似乎是最简单的选择,并且AFAI记得,这是我3年前与SVN合作时所做的。但是,这与直接与服务器URL一起工作的区别是什么?
额外 作者 oligofren,
它确实与svn版本1.8.5一致
额外 作者 Kevin Panko,
这样就不需要使用 rsyncsvn cp 也会复制任何本地更改。
额外 作者 Kevin Panko,

如果您通过https使用repo,则可以使用此命令来分支...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"
0
额外

假设你想从一个中继名称创建一个分支(如“TEST”) 然后使用:

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

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

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

该URL应该(如果你在根文件夹中运行svn)给你你需要复制的URL。

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

svn switch http://my.repo.url/myrepo/branches/newBranchName
0
额外
您也可以使用^代替存储库根目录
额外 作者 chim,
  • Create a new folder outside of your current project. You can give it any name. (Example: You have a checkout for a project named "Customization". And it has many projects, like "Project1", "Project2"....And you want to create a branch of "Project1". So first open the "Customization", right click and create a new folder and give it a name, "Project1Branch").
  • Right click on "Myproject1"....TortoiseSVN -> Branch/Tag.
  • Choose working copy.
  • Open browser....Just right of parallel on "To URL".
  • Select customization.....right click then Add Folder. and go through the folder which you have created. Here it is "Project1Branch". Now clik the OK button to add.
  • Take checkout of this new banch.
  • Again go to your project which branch you want to create. Right click TorotoiseSVN -> branch/tag. Then select working copy. And you can give the URL as your branch name. like {your IP address/svn/AAAA/Customization/Project1Branch}. And you can set the name in the URL so it will create the folder with this name only. Like {Your IP address/svn/AAAA/Customization/Project1Branch/MyProject1Branch}.
  • Press the OK button. Now you can see the logs in ...your working copy will be stored in your branch.
  • Now you can take a check out...and let you enjoy your work. :)
0
额外