版本控制Subversion TortoiseSVN apache VisualSVN笔记(转载)
转载于http://blog.sina.com.cn/s/blog_6b94d5680101m7ah.html
Subversion(简称svn)是近年来崛起的版本管理软件,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。
apache
Subversion和apache,apr,apr-util的关系
作者:PCplayer 来自:我用Subversion - http://www.iUseSVN.com 时间:2007.3.8 修改时间:2007.10.26
很多朋友初次接触Subversion时不是很理解subversion和apache的关系。
我在这里简单说明一下svn服务器和客户端的安装说明。
服务器
subversion服务器是不需要apache的,但是可以使用apache,视具体情况来选择。
1、如果只要通过file://或svn://来访问,则不需要apache,只安装svn即可,使用svnserve来作为服务。
2、如果你要建立一个可以通过http://或https://来访问的版本库服务器,则你需要使用apache。
基于apache配置,请看http://bbs.iusesvn.com/thread-158-1-1.html 。
客户端
在windows下,不管你要访问的是什么类型的服务器,只要安装一个TortoiseSVN就可以了,开发者已经帮你搞定一切。
在类Linux系统下,如果你通过file://或svn://来访问,则只要编译安装svn就可以,
如果通过http://访问,则要同neon编译,
如果通过https://访问,则要同带ssl支持的neon编译,
不论怎样,都要同apr和apr-util编译。
neon、apr、apr-util也很容易获得,目前发布的subversion代码都会有一个叫做subversion-deps-xxx的文件,比如1.4.3的就是subversion-deps-1.4.3.tar.bz2
对于访问国外网站比较慢的朋友,下载Subversion和客户端,可以到 http://www.iUseSVN.com ,因带宽和流量有限,网站只对注册用户开放下载,这点有点麻烦,但是很值得,一是下载速度的确相当快,二是里面有很多热于与大家交流的Subversion爱好者。
本文将介绍Windows下subversion作为Apache module的安装方法。
安装Apache
从 http://httpd.apache.org/ 上下载Apache。最新版本的subversion仅支持 Apache 2.0.x,不支持Apache 1.3.x,所以请下载 Apache 2.0.x 版本。最新版本为 Apache 2.0.59。
2007-6-6追加:另外subversion也不支持Apache 2.2.x版本,详细原因请参考这里。
下载之后运行安装程序进行安装。安装完毕之后,打开浏览器,输入 http://localhost/,如果能够看到 Apache 的欢迎画面,即表示安装成功。
安装subversion
下载
从 http://subversion.tigris.org/ 下载subversion,最新版本为1.3.1。这里我们选择for Win32的zip版(svn-win32-1.3.1.zip)下载。
安装
下载之后将 svn-win32-1.3.1.zip 解压缩到 C:\ 下。为方便起见,将目录名svn-win32-1.3.1修改为 svn。
然后我们需要建立一个保存subversion的版本库的目录。假设我们将此目录命名为 C:\svnwork。
打开“控制面板”->“系统”->“高级”->“环境变量”,修改PATH变量,在其末尾添加 C:\svn\bin。
然后将 C:\svn\bin 下面的 modauthzsvn.so、moddavsvn.so 两个文件复制到 Apache 的 modules 目录下。打开Apache的配置文件 httpd.conf,查找 LoadModule,将下面这一行之前的 # 去掉:
LoadModule dav_module modules/mod_dav.so
然后在LoadModule块的末尾添加如下两行:
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so
之后在httpd.conf的末尾添加如下几行:
<Location /repos> DAV svn SVNParentPath C:/svnwork </Location>
其中,repos 为从Web上访问版本库时所使用的路径,而SVNParentPath后面的目录即为版本库目录的位置。该指令告诉Apache,所有以 /repos 开头的请求都交给subversion处理。
然后重新启动计算机(原因请参见这里)。打开“控制面板”->“管理工具”->“服务”,查看Apache2服务的描述,如果描述变成类似于“Apache/2.0.54 (Win32) DAV/2 SVN/1.3.1”(包含SVN字样)则说明安装成功。
客户端设置
subversion的用户需要设置如下环境变量:
SVN_EDITOR="C:\Windows\notepad.exe"
当使用subversion进行导入、提交等操作时,subversion会调用该程序编辑提交说明。
建立subversion的版本库
作为演示,我们建立一个版本库。首先打开命令行提示符,进入C:\svnwork,输入以下命令:
svnadmin create demo
然后尝试向demo版本库中添加代码。假设我们在 D:\program\svntest 下面有一个名为 demo.c 的文件,那么我们输入以下命令:
D: cd program svn import svntest http://localhost/repos/demo
其中 svntest 为目录名。svn会调用文本编辑器来编辑说明文字,保存并关闭之后,svn会显示:
Adding svntest\demo.c Committed revision 1.
然后可以通过以下命令察看保存到服务器上的文件:
svn list http://localhost/repos/demo demo.c
VisualSVN
VisualSVN Server的配置和使用方法 图文
传到SVN 服务器上的代码存放的位置,在服务器安装时,有一个可配置的地方,可配置;且上传的代码是被压缩后存放在配置服务器时,指定的地方的;
SVN中trunk,branches,tags用法详解
比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是
svn://proj/|+-trunk+-branches+-tags
这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如freebsd),因为互联网的开发模式是完全不一样的。 1.第一种方法,使用trunk作为主要的开发目录
一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。
此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求【新开发的东西还不能用】,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。
例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。
按照时间的顺序
1.0开发完毕,代码冻结
基于已经冻结的trunk,为release1.0打tag
此时的目录结构为
svn://proj/
+trunk/ (freeze)
+branches/
+tags/
+tag_release_1.0 (copy from trunk)
2.0开始开发,trunk此时为2.0的开发版
发现1.0有bug,需要修改,基于1.0的tag做branch
此时的目录结构为
svn://proj/
+trunk/ ( dev 2.0 )
+branches/
+dev_1.0_bugfix (copy from tag/release_1.0)
+tags/
+release_1.0 (copy from trunk)
在1.0 bugfix branch进行1.0 bugfix开发,在trunk进行2.0开发
在1.0 bugfix 完成之后,基于dev_1.0_bugfix的branch做release等
根据需要选择性的把dev_1.0_bugfix这个分支merge回trunk(什么时候进行这步操作,要根据具体情况)
这是一种很标准的开发模式,很多的公司都是采用这种模式进行开发的。trunk永远是开发的主要目录。
2.第二种方法,在每一个release的branch中进行各自的开发,trunk只做发布使用。
这种开发模式当中,trunk是不承担具体开发任务的,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。还是举上面的例子,这里面的时序关系是:
1.0开发,做dev1.0的branch
此时的目录结构
svn://proj/
+trunk/ (不担负开发任务 )
+branches/
+dev_1.0 (copy from trunk)
+tags/
1.0开发完成,merge dev1.0到trunk
此时的目录结构
svn://proj/
+trunk/ (merge from branch dev_1.0)
+branches/
+dev_1.0 (开发任务结束,freeze)
+tags/
根据trunk做1.0的tag
此时的目录结构
svn://proj/
+trunk/ (merge from branch dev_1.0)
+branches/
+dev_1.0 (开发任务结束,freeze)
+tags/
+tag_release_1.0 (copy from trunk)
1.0开发,做dev2.0分支
此时的目录结构
svn://proj/
+trunk/
+branches/
+dev_1.0 (开发任务结束,freeze)
+dev_2.0 (进行2.0开发)
+tags/
+tag_release_1.0 (copy from trunk)
1.0有bug,直接在dev1.0的分支上修复
外网访问SVN服务器的方法
1、路由端口映射:
进入路由器管理管理界面-->转发规则-->虚拟服务器
将端口3690(svn默认端口)和你的局域网IP(如192.168.1.104)映射,勾上“启动”,保存,OK了。
2、测试:比如你的电信IP为:121.11.201.104;svn客户端输入地址:svn://121.11.201.104:3690/trunk
3、要让svn客户端能用http访问,好像要apche之类的服务器配合。