分支开发的意义:
场景一,有客户想对产品做定制,但是我们并不想修改原有的svn中trunk的代码。
场景二,我们正在开发产品下阶段的任务,但上阶段的工作发现问题
以场景二为例,项目某一阶段开发完成后,这个时候要做一个tag,tag_mfcai_V1.01.00,
然后基于这个tag发布一个新的版本,假设项目是web项目,那么基于这个tag发布一个web包。
然后trunk进入下阶段继续开发,但是很不幸发布的版本被检测出来了bug,有人会提议,把bug放到下阶段的任务中去。假设下阶段的任务才刚开始,用户可等不起.他们会认为一个小的bug解决要这么长时间,效率太低了.
那么就需要基于tag_mfcai_V1.01.00做一个branch,branch_bugfix_V1.01.00,基于这个branch进行bugfix,
等到bugfix结束,做一个tag,tag名称假设为:tag_mfcai_V1.01.01,基于这个tag再发布一个版本。
这样,又没有影响trunk(主分支)的开发。然后,根据需要决定branch_bugfix_V1.01.00是否并入trunk。
如何使用先进的分支技术
再介绍点打tag的知识。确认项目组成员的代码都commit后。
1)右击要打tag的目录—>TortoiseSVN—>branch/tag
2)再弹出来的对话框中,要求输入分支或标记的目标路径
3)创建分支或标记的时候,你有三个选项版本库中的最新版本,版本库中的指定版本,工作副本。
开始打分支第一步
1:指分支将存在的目录
2:分支的注释(不能丢呀,等分支多了!就搞坨数不清楚的拉)
3:这里分别说明三个分别是说明啥意思
1)Head revision in the repository –直接从版本库中最新创建,由于不需要从你的工作拷贝中传输数据,创建过程会很快。
2) Specific revision in repository ——同样是从版本库中创建,不同的是你可以指定一个版本号。如果你忘了版本号,可以通过显示版本记录来找到你想要的版本号(如下图)。这种方式同样不需要从你的工作拷贝中传输数据,创建过程也很快。
3) Woking copy ——这种方式会依据当前工作拷贝的版本状况(无论是你做了本地的修改,或是将其中的某些文件更新到了一个历史版本)来创建分支拷贝。这种创建方式会根据工作副本中每个文件的版本情况来决定是否要从工作拷贝向版本库中传输数据。
在这里我们必需先弄明白一个合并背后的关健概念
合并的过程中发生的所有事:首先两个版本库树的比较,然后将区别应用到本地拷贝.
这个命令是包括三个参数的:
初始的版本树 2.最终的版本树 3一个接收区别的工作拷贝。
弄明白这些概念之后我们继续往下操作。
在弹出的窗口中,选择主线目录和其版本号(初始的版本树),再选择主线目录和最新的版本号(最终的版本树),这里也可以是某一个版本号但应该比初始的版本树的版本号要高,接收区默认为你右键所指的目录,这里是clientt。
在合并之前我们可以通过点击“Unified diff”,查看两版本树之间所有文件的内容的变化,“diff”显示出有发生变化的文件列表,“dry run”能显示真正合并时的状态信息,但并没有做任何的合并操作。
我们点击“Merge”。
这里选择的是合并两个不同的版本树
分支合并到主线跟从主线上合并内容到分支上类似
不同的是
1、开始的版本库是分支创建的版本
2、结束的版本库是完成所以开发工作之后的版本
3、应用的目的是主线目录
SVN服务器代建小礼包
SVN 关闭服务器 killall svnserve
SVN 开启服务器 svnserve -d -r /SVN目录
后面的代建的全过程
系统环境
RHEL5.4最小化安装(关iptables,关selinux) + ssh + yum
一,安装必须的软件包.
yum install subversion (SVN服务器)
mysql-server (用于codestriker)
二,基本的SVN服务器配置
1,新建一个目录用于存储SVN所有文件
# mkdir /home/svn
2,新建一个版本仓库
# svnadmin create /home/svn/project
3,初始化版本仓库中的目录
# mkdir project project/server project/client project/test (建立临时目录)
# svn import project/ file:///home/svn/project -m “初始化SVN目录”
SVN服务器代建之后一定要初始化,不然根本就用不了。
4,添加用户
要添加SVN用户非常简单,只需在/home/svn/project/conf/passwd文件添加一个形如“username=password”的条目就可以了.为了测试,我添加了如下内容:
[users]
# harry = harryssecret
# sally = sallyssecret
Admin=admin
5,修改用户访问策略
/home/svn/project/conf/authz记录用户的访问策略,以下是参考:
[/]
Admin=rw
Admin 所有的目录都是读写的权限
6,修改svnserve.conf文件,让用户和策略配置升效.
svnserve.conf内容如下:
[general]
anon-access = none
auth-access = write
password-db = /home/svn/project/conf/passwd
authz-db = /home/svn/project/conf/authz
7,启动服务器
# svnserve -d -r /home/svn
8,测试服务器
# svn co svn://192.168.60.10/project
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for 'root':
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username: Admin
Password for 'admin':
svn: Authorization failed ( server_group没用根目录的访问权 )
A project/test
A project/server
A project/client
Checked out revision 1. ( 测试提取成功 )
# cd project/server
# vim main.c
# svn add main.c
# svn commit main.c -m "测试一下我的C程序,看什么看,不行啊??"
Adding main.c
Transmitting file data .
Committed revision 2. ( 测试提交成功 )
如果你代建的SVN服务器都OK,但是小乌龟无法访问:防火墙的问题。。。简单粗暴的方法: etc/ini.d/iptables stop
当然不是好太建议直接关闭防火墙:(SVN默认是3690端口)
RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT
再送一个小礼包
SVN Error: Unreadable path encountered; access denied;
解决方法:
编辑[代码仓库目录下]/conf/svnserve.conf
将[anon-access]的值设置为[none]
记得重启SVN服务器