移动到主干/分支/标签Subversion布局,不同状态下的不同工作副本

时间:2010-08-17 09:08:49

标签: svn

我们为网站提供以下开发模型:

  • 开发人员在他们的工作站上工作新东西,并提交到中央存储库
  • 提交后挂钩会自动更新测试Web服务器上此repo的签出,以便他们可以看到更改的效果
  • 当某项功能被认为足够稳定时,个别文件在生产网络服务器上显示为svn up
  • 测试和生产服务器上签出的副本中的文件永远不会被修改,因此从未用于提交回到repo

当然,这可以做得更好,但这个过程开始很小,并逐渐演变到这一点。但是我们现在想要引入“标准”主干/分支/标签repo组织。

This question解决了我们最初的担忧,现在我们在repo中有了新的目录结构,测试Web服务器已经切换到使用trunk。问题是我们不能对生产服务器做同样的事情,因为svn switch会让我们对所有文件进行HEAD修订,我们想要当前的修订。

我看到你可以-r BASEsvn switch一起使用,但是当我这样做时,我得到:

$ svn switch -r BASE https://old_URL/trunk
svn: 'https://old_URL' is not a working copy
svn: 'https://old_URL' does not exist

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

尝试使用@PEGREV语法:

C:\>svn help switch
switch (sw): Update the working copy to a different URL.
usage: 1. switch URL[@PEGREV] [PATH]
       2. switch --relocate FROM TO [PATH...]

更新

请注意,branchestagstrunk系统仅仅是一个命名约定。 Subversion中的这些项目并没有什么特别之处:它们只是目录。所以你有这个:

r1: Add: /site/
    Add: /site/css
    Add: /site/img

    Repo:
        /site/
        /site/css
        /site/img

r2: Add: /branches
    Add: /tags
    Add: /trunk

    Repo:
        /branches
        /site/
        /site/css
        /site/img
        /tags
        /trunk

r3: Copy: /site/ to /trunk
    Delete: /site/

    Repo:
        /branches
        /tags
        /trunk
        /trunk/site/
        /trunk/site/css
        /trunk/site/img

如果您的工作副本指向/site r1,则无法切换/trunk/site r1:该路径在r1的目录树中不存在。

一旦您决定发布新版本,让我们说r4,您就可以切换到/trunk/site r4;不是之前。

恕我直言,您应该创建一个分支(例如liverelease)并使实时服务器指向其最新版本。当您想要推送新的更改时,可以合并到该分支中。