Subversion Edge

Basic SVN tutorial video http://www.youtube.com/watch?v=6jP6k71qe0c&feature=related


Subversion Edge 是一个版本控制软件的集成包,集成了包括 Subversion、Apache 和 ViewVC 三个软件。安装简单、管理方便。可以装在window/linux。



official user guide: http://help.collab.net/index.jsp?topic=/csvn/action/manageusers_csvn.html
中文安装和基本使用教程: http://blog.miniasp.com/post/2011/12/30/CollabNet-Subversion-Edge-Installation-Notes-Part-1-Basic.aspx


下面以windows为例。(version is 3.1, requirement is jdk1.6)
1 下载setup.exe,安装
2 安装之后,就会创建了2个service: collabnet subversion edge & collabnet subversion server,这时 最好reboot machine.
   * collabnet subversion edge是一个browser-base的subversion system的管理平台。它的port是3343. collabnet subversion edge用来:
> repository management, 包括manage repository, define access rule, schudule backup and so on.
> user management
> subversion server setting,包括server port, ssl, 
   * collabnet subversion server是subversion system, it is base on apache,user都是通过它来进行代码版本控制。


3 access collabnet subversion edge主控台管理介面 from http://localhost:3343/csvn, by default super admin user name and password are "admin". 进入后你可以在里面启动subversion server,当启动之后你会看到(by default svn server port is 80):
> svn url is http://localhost/svn/, 你的svn tool通过该url来commit or checkout
> svn online view url is http://localhost/viewvc/, 你可以使用该url在浏览器来查看all files in svn repository



Eclipse svn plugin: subclipse
installation guide http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA
注意: 不用版本的subversion server使用不同version的plugin,应该先check清楚subversion server的svn version. subversion edge 3.0的svn version是1.7.5


安装完重启eclipse之后就可以access "SVN Repository Exploring" perspective, "Team Synchronizing" perspective and "SVN Repositories" view.


下面是多人一起使用svn开发"HelloProject"的流程
Flow A: create a svn repository

step 1, in subversino edge, create a repository (e.g "repo01") with standard trunk/branch/tag struture, let's say its svn url is http://xxx:8888/svn/repo01
step 2, create user account for all developers who can access this repository.

Flow B: developer A先在自己电脑上创建一个project "HelloProject", 然后把它放到放到svn repository里。

step 1, in eclipse, create a new normal project "HelloProject"
step 2, open "SVN Repositories" view, right click the view, select "New > Repository Location", set URL as "http://xxx:8888/svn/repo01", click Finish. 
step 3, right click the new project "HelloProject", select "Team > Share Project... > SVN", andthen select the repository location created in step 4. select "Use specified folder name" option and set it as "trunk/HelloProject",这就会把你的project存放在trunk folder下。 click Finish.\

注意:你设置的“specified folder name"有下列rules:它实际上是一个相对的URL,。所有中间文件夹必须已经存在于存储库中,但最终的文件夹名称则不能已经存在。例如:如果你设置的“specified folder name"是"trunk/HelloProject",则它对应的绝对url是”http://xxx:8888/svn/repo01/trunk/HelloProject“, 那么你的repository里必须要有trunk folder,而且必须没有"HelloProject" folder。

其实你可以使用Browse... 按钮从存储库选择一个路径。Browse(浏览) 对话框还允许您创建文件夹,这样您就可以使用该选项创建任何中间文件夹。

step 4, 这时已经把你的project连接到svn repository上了,但你会看到project的所有file都打了问号,这表示这些files都还没有commit to repository,你需要right click project node, select "Team > Commit...", give some comment,然后click OK就会完成第一次commit!
step 5, 当你在本地修改了某个文件,就会有标记表示该file改动过,同时在"Synchronize" view里会出现你改动过的文件。这时你可以再次提交。
step 6, 如果你想你的project脱离svn,那么right click project node, select "Team > Disconnect..."


Flow C: 当developer A把project commit到svn repository之后,其他developer则需要从svn repository里import该project到自己eclipse里。


Step 1, 各developer的eclipse需要装subclipse plugin,然后in "SVN Repositories" view, create a repository location for http://xxx:8888/svn/repo01
step 2, 找到"trunk"目录下的"HelloProject" folder, right click it, select "Checkout...", and then select "Check out as a project in the workspace" option, give project name as "HelloProject", click Finish.


Flow D:这时所有的developers都在自己的eclipse生成了来自svn repository的project copy,就可以开始进入开发周期了。基本操作就是”编辑(modify project),更新(update),提交(commit)“

当你在local eclipse对project进行改动时,改动的文件的icon就会带个"*"号,表示它修改过。如果在project里添加了new file,该file的icon就会带一个"?"。你可以right click 带"?"的file,select "Team > Add to Source Control", the file icon就由"?"变成"+"。

当你改动了project后,应该commit to svn repository:right click project, select "Team > Commit..."

另外你还要注意从svn repository进行更新:right click project, select "Team > Update"

需要养成的一个好习惯:就是在commit之前都应该先update一次!即使当你的改动是稳定的。您也应该在提交您的工作之前立即更新它们。项目资源中您修改的每一部分更新都会被关注,SVN会尝试合并这些更改。这将在您的更改和存储库中的更改不发生重叠的情况下产生效果,但是,如果更改是相互冲突的,您的工作副本中受影响的资源将被标记为被抵触,接着一些文本标记将释放出来,并由此引出在存储库和您的更改之间的那些差异。这些冲突可以选择手动修正。


Flow E: project有一个大改动,需要创建一个分支(branch)来进行开发,然后把分支(branch)和主干(trunk)合并

svn repository的standard folder structure为trunk/tags/branches
    •    trunk(主干)-项目开发的主线,也是最主要的,开发者们通常要针对它定期提交一些改动。我们通常都是在trunk下进行开发

    •    tags(标记)-在自定义的时间点上主干的一组copy,例如产品发布日。如果一个项目的大部分工作都已经在存储库的“trunk”里完成,您可能需要在存储库里“保存状态”,例如当你为一个随之而来的产品或者里程碑发布一个版本。当 然,你也可以仅仅记下你当前的修订号,然后你可以一直使用该信息以重建项目内容,或者与之对照等等。然而,你也可以给一个明确的标记名称,以方便查阅。按照约定,您决不能在一个存储库的"标记(tag)"位置上提交任何东西,它们仅仅因一个明确的存储库修订而存在。尽管如此,也没有任何操作会阻止您的提 交到"标记(tag)"位置(虽然Create Branch/Tag对话框在发现URL中包含"tags"字符时对您提出警告)。标记(Tags)仅仅是SVN的约定。如果您需要复制一份拷贝在不同的 目录工作的话,使用一个分支。

    •    branches(分支)-相比项目中的主干(甚至其它分支)而言,它是很活跃的变种。当开发当中的一个(大)改动需要团队内加以协调,或者单一工作副本的工作中进行项目变更已不可行的情况下,这就非常有用比如项目demo下有两个小组,svn下有一个 trunk版。由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的 开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主干线】的一个copy版,不过分支也是具有版本控制功能的,而且是和主干 线相互独立的,当然,到最后我们可以通过【合并】功能,将分支合并到trunk上来,从而最后合并为一个项目

tag branch trunk 的用法 http://blog.csdn.net/mqboss/article/details/5958225


无论你是创建tag or branch,在subclipse,都是通过right click project and select "Team > Branch/Tag…"


create a branch
1. right click, select "Team > Branch/Tag..."
2. set "Copy to URL" as "http://xxxx:8888/svn/testrepository/branches/branch03", "branch03" is real branch name under "branches" folder, and then 一路next, give a comment of this branch. If you want to switch to the branch immediately, tick "Switch working copy to new branch/tag" option.
3. click finish

这样就会在branches里添加了一个"branch03",并把当前trunk作了一个copy放到branch03里。


当你在开发branch03的过程中,有可能trunk会进行了更新,那么如何把最新的trunk副本合并到branch03里 (即merge from trunk to branch)
1. 首先切换到"To part",即切换到branch03: right click, select "Team > Switch...",然后set"To URL" as "http://xxxx:8888/svn/testrepository/branches/branch03", click OK
2. 切换到branch03之后,right click, select "Team > Merge...", select "Merge a range of revisions", click next
3. set "Mrge from" as "/trunk/HelloProject", click Finish
4. commit the updated branch to svn. 如果想反悔,则right click select "Team > Revert"


当你想把branch合并到trunk里时, (即merge from branch to trunk)
1. 首先切换到"To part",即切换到trunk: right click, select "Team > Switch...",然后set"To URL" as "http://xxx:8888/svn/repo01/trunk/HelloProject", click OK
2. 切换到trunk之后,right click, select "Team > Merge...", select "Reintegrate a branch", click next
3. set "Mrge from" as "/branches/branch03", click Finish
4. commit the updated branch to svn. 如果想反悔,则right click select "Team > Revert"


Flow F: project开发完成 or 到达一个里程碑,要创建一个Tag副本

创建Tag和上面创建branch的方法是一样的。


Flow G: 在trunk/branches/tags的project副本之间进行切换

right click project, select "Team > Switch..."


Flow H: 如何恢复到old version??


Subclipse Ref links:

把一个新项目导入到存储库, checkout

http://subclipse.group.iteye.com/group/wiki/1619-subclipse-getting-started-guide-and-reference-b

编辑、更新、提交代码, 分支操作

http://subclipse.group.iteye.com/group/wiki/1626-subclipse-getting-started-guide-and-reference-c

分支与合并透析
http://blog.csdn.net/fbysss/article/details/5437157

http://my.oschina.net/wenic705/blog/40825

http://sugarmanman.blog.163.com/blog/static/81079080201002815241990/

Subclipse菜单详解

http://subclipse.group.iteye.com/group/wiki/1676-subclipse-getting-started-guide-and-reference-d

svn标准目录结构

http://techlife.blog.51cto.com/212583/223704/





你可能感兴趣的:(Agile)