【问题标题】:Creating tags and branches for a subversion repository after the repository has already been created在创建存储库后为 subversion 存储库创建标签和分支
【发布时间】:2014-01-25 18:44:39
【问题描述】:

我是新手,所以请温柔。

我们在工作中使用 subversion 来跟踪我们对从另一个实体收到的相当大的软件项目所做的更改。然而,因为我们从未对我们的软件进行分支,所以我们没有为我们的存储库遵循传统的主干/标签/分支层次结构概念。我们只需使用以下命令创建存储库:

svnadmin create /data/svn/projectName

在服务器上,然后 svn import src svn://svnserver/projectName -m "第一次导入" 在客户端然后我们检查到一个工作目录。

但是,现在我想为我们的各种软件版本添加标签。我尝试通过以下几个链接重构存储库:

http://grand-prismatic.blogspot.com/2013/08/add-trunk-tags-branches-directory.html

但也许我不明白他们在做什么。我认为 trunk/branches/tags 目录是存储库结构的一部分,但不是源代码物理结构的一部分。当我点击上面的链接时,我的工作副本中出现了 tags/branches/trunk 目录,这是我不想要的。

我对标签和分支的功能有误解吗?有没有办法将标签目录添加到存储库而不必出现在我的工作副本中?

【问题讨论】:

  • 不,您检查了项目的“根”,没有办法“重写”它。你可以做的是switch你的工作副本到/trunk(或你想要的分支/标签)。标签和分支是 svn 中的目录(与其他一些 vcs 不同)。

标签: svn version-control


【解决方案1】:

您无需查看标签目录。通常,您将使用主干下的内容或您的一个分支下的内容。您可以将存储库的任何部分(比如主干,或主干中的一个目录)签出到您的工作目录。

标签目录的内容将是主干或任何分支的“标记”或纪元版本。例如,当测试发布并准备好从主干或分支到标签目录的副本时,该目录将包含发布时的所有正确版本。

目录名称trunk、tags、branch 不被强制执行。你可以随心所欲地称呼他们。习惯上最好使用这些名称,因为当您参考 svn 命令时,解释将与您的 svn 设置相吻合。如果你只有一个代码流(主干)并且从不偏离项目的代码分支,并且你不需要为特定版本制作标签,你可以简单地使用一个目录来保存 SVN 存储库中的所有版本。

此命令会将branch1检出到您指定的目录(/branch1-srcdir):

svn co SVN-URL/branch1  /branch1-srcdir 

或类似的中继:

svn co SVN-URL/trunk /trunk-srcdir

【讨论】:

    【解决方案2】:

    这就是 Subversion 的工作方式。您可以通过签出或切换到它们来使用分支。

    REPO_ROOT
    ├── branches
    │   ├── feature1
    │   └── feature2
    ├── tags
    └── trunk
    

    您不想签出 REPO_ROOT。您想要签出子目录,例如 /trunk/branches/feature1。你可以像这样切换到不同的分支:

    svn switch ^/branches/feature2
    

    您可以像这样从主干创建一个新分支:

    svn cp ^/trunk ^/branches/newfeature
    

    这并不意味着文件在存储库中是重复的。新分支有点像文件系统中的符号链接,因为它不会复制任何内容,但 Subversion 有自己的方法来提高效率。

    如果您检出整个 REPO_ROOT,内部存储库结构将在您的计算机上重新创建为常规文件系统,这将是巨大的。人们不会以这种方式使用 Subversion。你总是检查你想使用的分支。

    更新

    当您创建一个 repo 时,它将具有如下物理目录结构:

    $ svnadmin create myrepo
    $ tree myrepo/ -L 1
    myrepo/
    ├── conf/
    ├── db/
    ├── format
    ├── hooks/
    ├── locks/
    └── README.txt
    

    这与版本控制下的结构无关,/trunk/branches/tags 布局。新存储库创建为完全空白:

    # this outputs nothing
    svn ls file://$PWD/myrepo
    

    /trunk/branches/tags 布局只是一个约定。如果你决定使用它,你必须自己创建布局,例如这样:

    $ svn checkout file://$PWD/myrepo mycheckout
    Checked out revision 0.
    $ cd mycheckout/
    $ mkdir -v trunk branches tags
    mkdir: created directory `trunk'
    mkdir: created directory `branches'
    mkdir: created directory `tags'
    $ svn add *
    A         branches
    A         tags
    A         trunk
    $ svn commit -m 'created standard layout'
    Adding         branches
    Adding         tags
    Adding         trunk
    
    Committed revision 1.
    

    在此之后,我将删除 mycheckout 目录,然后签出 /trunk 并将项目文件添加到另一个提交中。

    此布局在myrepo 的物理目录中不可见。只有当您使用 repo 浏览器或 svn ls URL 命令浏览 repo 内容时,它才可见。

    您可以在此处阅读有关推荐的存储库布局的更多信息:

    http://svnbook.red-bean.com/en/1.7/svn.tour.importing.html#svn.tour.importing.layout

    【讨论】:

    • 感谢您的回答。我开始明白发生了什么,但是,我仍然对似乎是一个微不足道的概念感到困惑,只是假设每个人都理解它。如果我使用 svnadmin create /usr/tmp/svn/repos,我会在 /usr/tmp/svn 中获得一个名为 repos 的颠覆存储库。现在我假设 repos 对应于您帖子中的 REPO_ROOT 。该目录现在包含典型存储库中的 conf、dbs 等内容。然后我如何重组存储库,使其在 repos 下是 trunk/tags/branches 并且 conf、dbs 等在trunk下?
    • @user3170250 我在帖子中添加了更多解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2013-08-15
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多