我的本地 SVN 工作副本树设置为与存储库的目录结构匹配。换句话说,它到处都有主干、分支和标签文件夹。这是设置工作副本的好方法吗?任何更好/替代的想法?
5 回答
我会说,这有点不合常规。更典型的是,您将只签出您实际打算处理的项目分支/标签/主干的工作副本,而不是整个树。
如果您无法随时在整个树上进行意外更改,则更容易记住您正在更改的内容。
所以如果你有
proj
tags/
t1/
branches/
b1/
b2/
trunk/
你会做
svn checkout proj/trunk proj-trunk
如果您同时需要在分支上工作,请签出单独的工作副本:
svn checkout proj/branches/b1 proj-b1
我会补充一点,有时我会在根目录下保留一个小项目的工作副本,这样我就可以检查任何标签或分支,但我实际上并没有修改这个副本。这只是使用适当的文本编辑器等浏览项目存储库的一种快速方法。虽然它经常不同步并且需要勤奋地使用,svn up
所以我不经常使用这种技术。
我发现以类似于您的方式的工作副本很方便,但有一个例外,我对分支和标签进行稀疏签出,并根据需要填充/删除它们。所以结帐命令有点像
$ 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
...
在我看来,这是一个好主意,以防您需要检查新分支,而不检查整个存储库。您实际上不需要创建暂时不会使用的文件夹。例如,您应该从myproject/trunk
在项目主干上开始工作时开始:这样,一旦您想移动到分支,您也可以在最合适的路径中检查它。
我也更喜欢在分支名称之后创建修订文件夹,myproject/branches/mybranch/[rev]
为了清楚起见,当我经常需要在修订之间切换时。
我通常对源代码控制所做的事情是同步到主分支的最新版本或当前称为主分支的任何内容。一般而言,如果特定客户要求我不希望包含在所有构建的通用中的特定功能,我只会分支或同步到分支。但是,如果该功能进展到足以让我考虑将其移至“GA”构建,那么我总是可以将这些更改合并回主分支。
subversion 的全部目的是管理您的版本并提供备份。保持多个分支似乎是一种很快变得杂乱无章并在未来真正让自己感到困惑的好方法。恕我直言,首先破坏了源代码控制的目的。
通常像迈克尔解释的那样
proj
tags/
branches/
trunk/
但我也曾经为文档或库添加文件夹。