我应该如何构建SVN的工作副本



我的本地SVN工作副本树设置为与存储库的目录结构相匹配。换句话说,它到处都有主干、分支和标签文件夹。这是设置工作副本的好方法吗?有什么更好/替代的想法吗?

我发现以类似于您的方式进行工作副本很方便,只有一个例外,我对分支标签进行稀疏的签出,并根据需要填充/删除它们。所以结帐命令有点像

$ svn co --depth immediates url_of_myrepo $PWD ;# empty checkout of the repo
$ svn up --set-depth infinity $PWD/myrepo/trunk  ;# sticky dense update of the trunk
...
$ svn up --set-depth infinity $PWD/branches/release_branch ;# sticky dense update of a branch
$ cd $PWD/branches/release_branch
$ svn merge -c 1234 ../../trunk ;# merge a revision from trunk
$ svn commit
$ cd ..
$ svn update --set-depth exclude release_branch ;# sticky wipe out of branch from the working copy
...

我想说,这有点不合常规。 更典型的是,您将仅签出您实际打算处理的项目分支/标签/主干的工作副本,而不是整个树。

如果您无法随时意外地在整个树上进行更改,则可以更轻松地记住要更改的内容。

所以如果你有

proj
  tags/
    t1/
  branches/
    b1/
    b2/
  trunk/

你会做的

svn checkout proj/trunk proj-trunk

如果您同时需要处理分支,请查看单独的工作副本:

svn checkout proj/branches/b1 proj-b1
我会

补充一点,有时我会在根目录签出一个小项目的工作副本,这样我就可以检查任何标签或分支,但我实际上并没有修改这个副本。这只是使用适当的文本编辑器等浏览项目存储库的快速方法。 不过,它经常不同步,并且需要大量使用svn up所以我不会经常使用这种技术。

在我看来,如果您需要签出新分支而不签出整个存储库,这是一个好主意。您实际上不需要创建暂时不会处理的文件夹。例如,当你开始在项目的主干上工作时,你应该从类似myproject/trunk的东西开始:这样,一旦你想移动到一个分支,你也可以在最合适的路径中检查出来。

我也更喜欢在分支名称后制作修订文件夹,例如myproject/branches/mybranch/[rev]为清楚起见,当我经常需要在修订之间切换时。

我通常使用源代码管理所做的是同步到主分支的最新版本或当前称为主分支的任何内容。一般来说,只有当特定客户要求我不希望包含在所有构建的一般可用功能中的特定功能时,我才会分支或同步到分支。但是,如果该功能进展到足以让我考虑将其移动到"GA"版本,那么我可以随时将这些更改合并回主分支。

Subversion 的全部目的是管理您的版本并提供备份。保留多个分支似乎是快速变得杂乱无章并在将来真正混淆自己的好方法。恕我直言,首先破坏了源代码控制的目的。

像迈克尔解释的那样平常

proj
  tags/
  branches/
  trunk/

但我也曾经为文档或库添加文件夹。

最新更新