SVN分支问题

时间:2010-06-02 09:56:22

标签: svn copy repository branch options

创建分支时,选择以下内容有什么含义?

从以下位置在存储库中创建副本:

  • 存储库中的HEAD修订
  • 特定版本的存储库
  • 工作副本

4 个答案:

答案 0 :(得分:4)

简而言之:

  • 从HEAD修订版创建创建从“now”开始的分支,其中“now”是提交到存储库的最新版本
  • 从特定修订版创建是从过去的一个点开始创建一个分支(由其修订版号标识)
  • 从工作副本创建有点像从未来的某个点开始创建分支(您的工作副本,尚未提交)

根据创建分支的目的,您通常会选择前两个选项之一。第三种选择可能不太常用。

如果您想为特定目的进行一些探索性开发,或者您想开始为特定客户或其他东西创建不同版本,您可以从HEAD分支。如果您需要修补以前发布的软件版本,您可以从过去分支。

答案 1 :(得分:1)

存储库中的HEAD修订 SVN使用最高编号的版本,以及最后上传的版本。

对存储库进行特定修订 您可以选择您想要的修订版本。

工作副本 像它一样的修订版现在在你的本地工作空间中(没有投入)。

答案 2 :(得分:1)

HEAD将使分支成为存储库的最新提交版本的副本。

特定修订将导致分支在存储库的特定时间点成为副本。

工作副本会根据您的工作副本的最新版本创建一个分支,然后同时承诺所有“正在进行”的更改。

编辑: 选择工作副本的示例。

您使用最新版本的主干更新您的工作副本,以开始进行一些小的更改。

几小时后你意识到这份工作比你预期的要大,你应该创建一个分支。

此时从工作副本创建分支,然后有效地创建分支,就像您在开始时一样。

答案 3 :(得分:1)

在svn中“创建分支”实际上只是复制了存储库的某个子集。事实上,关于branching says as much的SVN Book章节。

如果您的目录结构如下所示......

  • 项目
    • 躯干
    • 分支
    • 标记

您的中继网址为:http://example.com/repos/project/trunk,您可以:

  1. 从HEAD创建一个名为beta的新分支,如下所示:

    svn copy http://example.com/repos/project/trunk http://example.com/repos/project/branches/beta
    

    这将立即在存储库中创建新分支,并且不会对您的本地副本执行任何操作。

  2. 从旧版本 n 创建一个名为ancient的新分支,如下所示:

    svn copy -r n http://example.com/repos/project/trunk http://example.com/repos/project/branches/ancient
    

    这与 1 完全相同,但使用的是特定版本。

  3. 从本地副本创建一个名为alpha的分支,假设您当前的目录为trunk

    cd ../
    svn cp trunk branches/alpha
    

    这将生成您请求的副本,但会在本地执行。根据SVN的书,这是不鼓励的,因为它比在存储库服务器上复制(复制操作基本上是免费的)需要更长的时间。

    当您输入svn help copy

    时,还会列出此警告
      

    警告:为了与以前版本的Subversion兼容,   使用两个工作拷贝路径(WC-> WC)执行的拷贝不会   联系存储库。因此,默认情况下,它们可能不会   传播来自副本源的合并跟踪信息   到目的地。

  4. 根据我的经验,通常使用 1 2 用于某些罕见的情况,涉及早期分支的复杂补丁, 3 永远不会有用(根据文档,速度慢且可能很危险)。所以坚持使用 1 ,除非你有令人信服的理由使用其他两个中的一个。