Basic SVN tutorial video http://www.youtube.com/watch?v=6jP6k71qe0c&feature=related
Subversion Edge 是一个版本控制软件的集成包,集成了包括 Subversion、Apache 和 ViewVC 三个软件。安装简单、管理方便。可以装在window/linux。
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/