Answers:
Subversion中的分支通过非常轻便高效的复制工具而得以实现。
分支和标记实际上是相同的。只需使用svn copy
命令将存储库中的整个文件夹复制到存储库中的其他位置。
基本上,这意味着按照惯例,复制文件夹的含义-无论是备份,标签,分支还是其他。根据您对事物的看法(通常取决于您过去使用的SCM工具),您需要在存储库中设置一个文件夹结构来支持您的样式。
常见的款式在你的仓库顶部叫有一堆文件夹tags
,branches
,trunk
,等等-这允许您在整个复制trunk
(或子集)进入tags
和/或branches
文件夹。如果您有多个项目,则可能要在每个项目下复制这种结构:
可能需要一段时间才能习惯该概念-但它确实有效-只要确保您(和您的团队)对将要使用的约定清楚。拥有良好的命名约定也是一个好主意-可以告诉您创建分支/标记的原因以及是否仍然合适-可以考虑将过时的分支归档。
svn cp
使用廉价的拷贝,它并没有分支中复制的实际文件。参见svnbook.red-bean.com/en/1.1/ch04s02.html
使用以下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
option与svn copy
!一起使用。
-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)。
svn cp /trunk/ /branch/NEW_Branch
如果您在中继中有一些本地更改,则用于Rsync
同步更改
rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
rsync
这种方式使用。 svn cp
还将复制任何本地更改。
假设您要根据中继名称(如“ TEST”)创建分支,然后使用:
svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
SVN新用户的最佳技巧;这可能有助于快速获取正确的网址。
跑 svn info
以显示有关当前已检出分支的有用信息。
该URL应该(如果您在根文件夹中运行svn)为您提供了需要复制的URL。
另外,要切换到新创建的分支,请使用以下svn switch
命令:
svn switch http://my.repo.url/myrepo/branches/newBranchName
如果您甚至打算合并分支,我强烈建议您看一下:
我听说Subversion 1.5内置了更多的合并跟踪功能,对此我没有任何经验。我的项目在1.4.x上,而svnmerge.py可以挽救生命!