本手册描述的是 Subversion 1.6.x 系列。如果您运行的是其他版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并参阅适合您 Subversion 版本的手册。
命令 svn switch 可将现有工作副本转换为反映不同分支的内容。虽然此命令并非严格意义上用于处理分支的必要操作,但它提供了一种便捷的快捷方式。在我们之前的示例中,创建完私有分支后,您检出了新仓库目录的全新工作副本。而实际上,您只需让 Subversion 将 /calc/trunk
的工作副本修改为与新分支位置一致即可。
$ cd calc $ svn info | grep URL URL: http://svn.example.com/repos/calc/trunk $ svn switch ^/calc/branches/my-calc-branch U integer.c U button.c U Makefile Updated to revision 341. $ svn info | grep URL URL: http://svn.example.com/repos/calc/branches/my-calc-branch
将没有本地修改的工作副本 “切换” 到不同分支会使工作副本看起来就像您直接检出了该目录一样。通常使用此命令效率更高,因为分支之间通常只有很小的差异。服务器只发送将您的工作副本转换为分支目录所必需的最小更改集。
命令 svn switch 还接受 --revision
(-r
) 选项,因此您不必总是将工作副本移动到分支的 HEAD
。
当然,大多数项目比我们 calc
的示例更复杂,并且包含多个子目录。Subversion 用户在使用分支时通常遵循特定算法。
将项目的整个 “trunk” 复制到新的分支目录。
仅将 部分 trunk 工作副本切换为反映分支。
换句话说,如果用户知道分支工作只需要在特定的子目录上进行,则可以使用 svn switch 将仅该子目录移动到分支。(或者,用户有时会将单个工作文件切换到分支!)这样,用户就可以继续接收大部分工作副本的正常 “trunk” 更新,而切换的部分将保持不受影响(除非有人提交了对分支的更改)。此功能为 “混合工作副本” 的概念增添了新的维度——工作副本不仅可以包含混合的工作修订版,还可以包含混合的仓库位置。
如果您的工作副本包含来自不同仓库位置的多个切换的子树,它将继续正常工作。更新时,您将根据需要接收每个子树的补丁。提交时,您的本地更改仍将作为对仓库的单个原子更改应用。
请注意,虽然工作副本可以反映混合的仓库位置,但这些位置必须全部位于 相同 的仓库中。Subversion 仓库目前无法相互通信;该功能计划在未来实现。[28]
由于 svn switch 本质上是 svn update 的变体,它也具有相同的行为;当从仓库接收新数据时,工作副本中的任何本地修改都将保留。
![]() |
提示 |
---|---|
您是否曾经发现自己在进行一些复杂的编辑(在您的 $ svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/branches/newbranch \ -m "Create branch 'newbranch'." Committed revision 353. $ svn switch ^/calc/branches/newbranch At revision 353. 命令 svn switch 与 svn update 一样,会保留您的本地编辑。此时,您的工作副本已成为新创建分支的反映,您下次调用 svn commit 时,您的更改将被发送到该分支。 |
[28] 但是,如果您服务器的 URL 发生了更改并且您不想放弃现有工作副本,则可以使用 svn switch 的 --relocate
选项。有关详细信息和示例,请参见 svn switch (sw)。