如何同时在树干和树枝上工作?

时间:2016-10-17 21:33:40

标签: svn tortoisesvn branch branching-and-merging

我正在阅读和测试subversion(通过TortoiseSVN)分支和合并系统,我无法完全理解它。

我有一个项目MyProject,其根目录中有一个src目录。使用TFS我可以从中创建一个分支,将其称为big-dev-src,然后(在根目录中)包含src(主干)和big-dev-src(分支)。我可以update / get latest version任意,commit / check in任意和merge他们(分支合并,反之亦然)。两者完全独立。

现在,使用subversion似乎我需要执行switch操作才能从一个更改为另一个,如果我有待更改,switch将会merge他们。

我理解错了吗?无论如何以TFS工作的方式使用它?

谢谢!

2 个答案:

答案 0 :(得分:0)

  

似乎我需要进行切换操作以从一个切换到另一个

可以切换(或不切换),因为您可以为任意数量的相关存储库网址提供任意数量的工作副本

使用“每个URL的WC”(一个用于主干,一个用于每个WIP分支),您可以完全独立工作

PS:你也可以签出repo-root(常识中的坏主意,但这是可能的)

>dir /B
branches
readme.textile
tags
trunk

>svn info
....
Relative URL: ^/
...

答案 1 :(得分:0)

有一个最佳实践项目结构,如下所示:

myproject
|- trunk       (main line of development, in your case: src)
|- branches
|  |- big-dev  (your big-dev-src)
|  :
`- tags

当然,这只是一个没有以任何方式强制执行的建议;从Subversion的角度来看,分支是副本。

尽管有额外的"目录级别"完全可以在同一个父目录中拥有主干和分支的工作副本,并且可以同时更改它们:

# svn checkout svn://svn.myserver/myproject/trunk src
# svn checkout svn://svn.myserver/myproject/branches/big-dev big-dev-src

您可以对它们进行类似的更改并在一个版本中提交它们(尽管您只是为了非常简单的更改而这样做):

# cd src
# svn commit . ../big-dev-src

当然,您可以将更改从一个目录树合并到另一个目录树。 但是,如果您使用非网址进行合并,则必须指定修订版(-c-r选项)。您应该将合并与其他更改隔离开(即,始终合并到一个干净的工作副本,没有任何未经修改的更改,并在更改其他任何内容之前首先提交合并结果)并使用--record-only选项告诉分支有关其更改的更改已经进入后备箱。