4

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

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

  • 存储库中的 HEAD 修订
  • 具体修订版本库
  • 工作副本
4

4 回答 4

4

简而言之:

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

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

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

于 2010-06-02T09:59:12.840 回答
1

存储库 SVN 中的 HEAD 修订采用编号最高的修订,因此是最后上传的修订。

存储库的特定修订 您可以选择您想要获得的修订。

工作副本 就像它现在在您的本地工作区中的修订版(未提交)。

于 2010-06-02T10:00:34.820 回答
1

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

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

工作副本根据您的工作副本的最新修订创建一个分支,然后也提交您所有“进行中”的更改。

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

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

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

此时从工作副本创建一个分支然后有效地创建分支,就好像您在一开始就已经完成了一样。

于 2010-06-02T10:01:40.683 回答
1

svn 中的“创建分支”实际上只是复制存储库的某个子集。事实上,SVN Book 关于分支的章节也说了很多

如果你的目录结构是这样的……</p>

  • 项目
    • 树干
    • 分支机构
    • 标签

并且您的主干 URL 是:http://example.com/repos/project/trunk,您将:

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

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

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

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

    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)执行的副本将不会联系存储库。因此,默认情况下,它们可能无法将合并跟踪信息从副本的源传播到目标。

根据我的经验,通常使用方式1 。2在一些罕见的情况下使用,涉及到早期分支的复杂补丁,而3从来没有用过(根据文档,缓慢且可能很危险)。所以坚持使用1,除非您有令人信服的理由使用其他两个中的一个。

于 2010-06-02T10:12:06.227 回答