为什么要使用svn开关?

为什么要使用svn开关?,svn,Svn,我有带分支、标签和主干的svn回购 现在,当我创建新分支时, 必须使用svn开关切换到该分支吗? 我不应该直接在那个分支目录上工作吗 抱歉,这听起来很愚蠢。嗯,SVN开关功能并没有那么无用 有时,您可能会在一个版本的多个分支中拥有庞大的代码库 考虑一个场景: 您有一个名为Release X的分支,出于某种目的,您可以从中创建另一个分支Release X.1 如果开发人员现在想使用X.1 Branch,他有两个选择: 检查整个分支和完整的代码库(耗时?) SVN打开版本X工作副本,指向版本X.1(

我有带分支、标签和主干的svn回购 现在,当我创建新分支时, 必须使用svn开关切换到该分支吗? 我不应该直接在那个分支目录上工作吗


抱歉,这听起来很愚蠢。

嗯,SVN开关功能并没有那么无用

有时,您可能会在一个版本的多个分支中拥有庞大的代码库

考虑一个场景:

您有一个名为Release X的分支,出于某种目的,您可以从中创建另一个分支Release X.1

如果开发人员现在想使用X.1 Branch,他有两个选择:

  • 检查整个分支和完整的代码库(耗时?)
  • SVN打开版本X工作副本,指向版本X.1(考虑到没有重大变化)-效果非常好
  • 完成工作后,无缝切换回上一个分支
  • 这是其中一个场景。。。重新定位存储库时会发生什么?整个URL都会改变。切换是智能的,而不是校验

    我相信我已经表明了我的观点:)

    必须使用svn开关切换到该分支吗

    就RFC而言,不是“必须”,甚至不是“拥有”。您可以切换WC,但“切换或不切换”是一项繁重的工作流程、风格和情况相关的工作

    一些著名的理论

    • 每个WC都有一个(目前)存储库根URL属性
    • 我们不能在WC(没有技巧)中操作repootURL下面的对象
    • 虽然标记和分支在存储库中是廉价的副本,但它们在工作副本中并不便宜(通常情况下),并且浪费了与“原件”相同的空间
    • 您可以选择存储库中的任何节点作为工作副本的根节点,具体取决于您的首选项
    • 您可以为存储库的不同部分使用任意数量的工作副本(1+)
    所有这些导致以下事实:

    • 您可以始终使用一个WC(更少的空间、更多的流量和切换时的更新时间),根到存储库树深处的某个节点,并根据需要将此WC切换到其他节点
    • 您可以为每个不相关的节点使用一个WC(更多空间,更少流量-无需切换,切换后无需同步WC)和更改WC
    • 您可以(在某些情况下)从根目录获得整个存储库的WC(标签/分支侧频繁更改时的最大空间和流量使用,WC中repo的无用未使用部分),并在单个WC树上导航

    正如您所看到的,只有在1/3的情况下,转换才是必须的

    假设您的回购看起来有点像这样:

    .
    ├── branches/
    │   ├── branch1/
    │   │   └── src/
    │   └── branch2/
    │       └── src/
    └── trunk/
        └── src/
    
    如果你已经签出了整个回购协议,那么分支会像你说的那样显示为另一个子目录

    然而,通常的工作方式是只签出主干,然后svn切换到分支,svn切换回来。这样,您就不必签出这么多数据,您的ide总是查看同一个目录,您也不会感到困惑并意外地编辑了错误的分支


    就我个人而言,在我必须使用分支的地方,我会在我的工作区目录中将每个分支并排签出到单独的目录中。但我大多避免分支。

    嗯,我想我现在明白了。但是像我这样的小案子。我可以直接在分支上工作,对吗?但是如果
    trunk
    切换到分支,在记得切换回
    trunk
    之前,对
    trunk
    的访问不是会丢失吗?听起来有点“黑客”喜欢在保留
    trunk
    目录名的同时更改后台内容。是的,的确如此。因此,最好使用
    SVN info
    命令检查当前的SVN分支。