我如何在SVN中创建一个分支?
使用以下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"
Subversion提供了一种非常轻便高效的复制工具来实现分支功能。
分支和标记本质上是相同的。只需使用svn copy
命令将存储库中的整个文件夹复制到存储库中的其他位置即可。
基本上这意味着按照约定,复制文件夹表示什么意思--无论是备份、标记、分支还是其他。根据您想要如何考虑问题(通常取决于您过去使用的SCM工具),您需要在存储库中设置一个文件夹结构以支持您的风格。
常见的做法是在存储库的顶部有一堆名为tags
, branches
, trunk
等的文件夹,这使您可以将整个trunk
(或子集)复制到tags
和/或branches
文件夹中。如果您有多个项目,您可能希望在每个项目下复制此类结构:
要习惯这个概念可能需要一段时间,但它确实有效 - 只需确保您(和您的团队)清楚了解您将要使用的约定即可。还有一个好主意是采用良好的命名约定 - 这样可以告诉您为什么创建了分支/标记以及它是否仍然合适 - 考虑归档已过时的分支。
svn cp
使用廉价副本进行分支操作,而不是复制实际的文件。请参见 http://svnbook.red-bean.com/en/1.1/ch04s02.html。 - Walty Yeung如果你的仓库可以通过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"
svn cp /trunk/ /branch/NEW_Branch
如果您在主干中有一些本地更改,则使用Rsync
同步更改。
rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
svn cp
同样可以复制任何本地更改。 - Kevin Panko假设您想从主干名称(如“TEST”)创建一个分支,则可以使用:
svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
给新的SVN用户的顶级提示; 这可能会有助于快速获取正确的URL。
运行svn info
以显示有关当前签出分支的有用信息。
如果您在根文件夹中运行svn,则应该(如果您在根文件夹中运行svn)提供您需要复制的URL。
另外,要切换到新创建的分支,请使用svn switch
命令:
svn switch http://my.repo.url/myrepo/branches/newBranchName
通常你会将它复制到svn+ssh://host.example.com/repos/project/branches/mybranch,以便您可以在仓库中保留多个分支,但是您的语法是有效的。
这里有一些建议,关于如何设置您的仓库布局。
如果你打算合并你的分支,我强烈建议你查看这个链接:
我听说Subversion 1.5构建了更多的合并跟踪功能,但我没有经验。我的项目使用的是1.4.x版本,而svnmerge.py简直是救星!
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
(如果要在单独的目录中创建新分支)开始在新创建的分支上工作。 - Jakub Narębskisvn copy
命令的--parents
选项! - Jakub Narębski-m
选项,它会显示类似于svn: E155010: 路径'/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5'不存在
。使用-m
则会显示svn: E205009: 本地非提交操作不需要日志消息或修订属性
。*(我替换了地址,但它们确实存在,除了新分支目录和整个路径+URL,这是 SVN 出现错误的原因)*。 - Hi-Angelsvn cp
==svn copy
,所以这个答案中的svn+ssh
部分是错误的,它不起作用(会触发上述错误↑)。 - Hi-Angel