配置Subversion
采用Subversion作为版本控制,配置方式如下:
版本控制选用Subversion,它对重构的支持比CVS要好。例如改名,原子提交等CVS无法支持的操作。
安装 Subversion
到 http://subversion.tigris.org/ 下载最新版的 Subversion,你可以下载 .zip 或者打包好的自动安装程序,我下载的是档案 svn-1.3.2.setup.exe。
下载后直接安装,安装过程都是下一步,没什么特别的。安装完成后,连必要的环境变量都帮你设定好了(如果你下载的是 .zip 档,就要自行设定)。
建立档案库
假设我们要把所有的档案库都放在 d:/svn 目录下,现在要建立一个测试用的档案库,名称叫做 在 repository,指令为:
md d:/svn
svnadmin create d:/svn/repository、
命令执行完后,检查看看 d:/svn/repository 目录底下产生了哪些目录和档案。
警告
档案库绝对不可以在建立在任何远程的储存媒体上,例如:网络磁盘驱动器。
汇入专案
不用急着把你现有的正式项目汇入档案库,先建立一个用来测试的项目目录就好了。我们先在 c:/temp 底下建一个 ProjectA 的项目目录结构,参考下面的指令:
c:
cd temp
md ProjectA
md ProjectA/trunk
md ProjectA/branches
md ProjectA/tags
svn import . d:/svn/repository -m "Initial repository layout"
或通过TortoiseSVN建立svn根目录。立即就可以使用client通过file:///d:/svn
来访问该目录。
档案库与项目的配置方式
延续前面的范例,如果你再汇入其它项目,例如 ProjectB,那么整个档案库的结构会变成这样:
/svn/repository/
+-- ProjectA/
+-- ProjectB/
也就是说 repository 这个档案库里面包含了两个项目。
如果你希望为每个项目建立一个档案库,那么在 2.4 节中建立档案库的指令就变成:
md d:/svn
svnadmin create d:/svn/repository/ProjectA
svnadmin create d:/svn/repository/ProjectB
这样就变成有两个档案库了,档案库名称分别是 ProjectA 与 ProjectB。
提示 如果项目之间有共享的档案,建议把这些相关的项目放进同一个档案库;如果项目之间彼此毫无关系,那就采用一个档案库放一个项目的方式,这种方式等于项目就是档案库。 第一种方式有个比较奇怪的「功能」你应该要知道,就是一个项目的 check in 动作,也会令其它项目的档案的修订版次递增 ,如果这不是你想要的,请选择第二种方式,即一个档案库只存放一个项目。 |
---|
项目的目录结构
这里补充说明一下 ProjectA 的目录结构。在 ProjectA 项目的根目录下建立的 trunk、branches、和 tags 这三个目录是有特别意义的,它们的作用分别是:
trunk 目录用来存份目前项目正在进行开发的程序档案和文件(又称为主线,即 mainline);
branches 用来存放主线的各个仍在发展中的分支;
tags 则用来存放已经不再变动的分支,也就是其中的档案不会再修改了。
这是 Subverion 官方手册建议的目录结构安排方式,你可以自己决定要不要用这种配置方式,详细说明请参考官方手册的第五章,子标题为 "Choosing a Repository Layout"。
SVN有3种常用访问方式。通过file://, svn://,http:// 等不同的协议来访问。对于协作开发,这三种都可以胜任:如果在同一局域网内,可通过windows的文件共享协议来访问其他机器上的文件,例如file://server/d/svn。svn协议使用3690端口,如果防火墙无法打开端口,可与Apache整合使用http协议。
采用svn协议的好处是安全性比较强,可任意更改服务监听端口。运行%SVN_HOME%binsvnserve –d –r d:svn,即可按照daemon方式来运行一个后台进程,监听svn协议的请求。-r的作用是声明root目录。
在linux下运行一个daemon进程非常简单,但是在windows中想让进程在后台运行就需要做成服务才行。下载并安装SVN Service Wrapper,将svnserve包装为服务。
http://dark.clansoft.dk/~mbn/svnservice/
执行:svnservice -install -d -r d:svnrepo
,在控制面板->服务中手动开启。用TortoiseSVN浏览svn://localhost/,注意要带上最后的“/”指明root才能正确访问。
使用版本控制必须要进行权限控制,svn协议的权限控制可通过ssh来控制,访问协议则改为:svn+ssh://localhost/
,windows下这种方式需要安装ssh客户端。
另一种简易的版本控制为使用passwd文件。修改%REPO_HOME%/conf/ svnserve.conf,包含如下几句:
[general] # 指定匿名可读,授权后才可写入 anon-access = read auth-access = write # 指定密码文件为当前目录下passwd password-db = passwd |
---|
Passwd文件内容如下,用户名 = 密码:
[users] user1 = 123456 |
---|
Subversion的Eclipse插件为:Subclipse,对SVN支持比较完善。一般的操作均可胜任。Subclipse和TortoiseSVN结合使用能发挥更大的威力。
相关网站
http://subversion.tigris.org SVN官方网站
http://tortoisesvn.tigris.org TortoiseSVN,很好的SVN客户端
http://dark.clansoft.dk/~mbn/svnservice/ SVN Service Wrapper
http://subclipse.tigris.org SVN eclipse插件
参考资料
http://svn.ntcu.net/kwiki/ 中文的SVN资料
http://svnbook.red-bean.com/ Book: Version Control with SVN
http://sun.cis.scu.edu.tw/~nms9115/articles/softeng/scm/svn/2-install/svn_install.htm SVN for Windows中文安装指南
http://svn.ntcu.net/svnbook/ SVN Book中文翻译
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android模仿实现微博详情页滑动固定顶部栏的效果实例
- Android EventBus(普通事件/粘性事件)详解
- Android实现EventBus登录界面与传值(粘性事件)
- Android自定义LinearLayout布局显示不完整的解决方法
- android短信管理器SmsManager实例详解
- Android开发判断一个app应用是否在运行的方法详解
- 收割腾讯等十几个Offer后,揭秘进大厂的秘诀和Android技术面试题汇总!
- Flutter BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探
- Android设备获取扫码枪扫描的内容与可能遇到的问题解决
- 3分钟短文:胆儿真肥!Laravel在命令行问用户要数据!
- 实战矿马:数据异常牵出的挖矿木马(.systemd-service.sh)
- leetcode之两个相同字符之间的最长子字符串
- 面试阿里被P8质问:ConcurrentHashMap真的线程安全吗?
- 腾讯云TKE-搭建prometheus监控(二)
- Qt音视频开发41-人脸识别嵌入式