Posted on 2007-10-23 18:34
京山游侠 阅读(7732)
评论(7) 编辑 收藏 所属分类:
SVN与源代码管理
我的上一篇随笔讲了怎么使用Subversion客户端去连接服务器,由于服务器是别人的,我们只能体验到有限的功能。要探索版本控制的方方面面,非得自己建立Subversion服务器不可。在这一篇中,我将构建一个自己的源代码仓库。
首先是规划,我觉得应该从以下几个方面来考虑问题:
1、源代码仓库放在什么地方?
2、怎么将版本库发布到网络上?
3、设置什么样的认证和授权策略?
先来看第一个问题。我认为,一个开发团队应该使用一台单独的服务器来存放版本库,而这台服务器的操作系统,我推荐是Unix/Linux。原因很简单,因为大多数的Unix/Linux系统都自带有Subversion软件,而且Unix/Linux系统都有很好的安全性。
我使用的是红旗桌面6.0,才推出没多久,号称内核和所有自带的软件包都是最新的,我推荐大家使用。当然,这个系统也不是完美无缺的,毕竟国产的东西常遭诟病,我选择它的原因主要还是字体比较清晰。红旗桌面6.0自带的Subversion软件为1.4.2。先给大家看一个截图:
在Linux系统中,我建立了一个目录/var/svnroot作为版本库的存放目录,然后使用svnadmin命令来创建了一个版本库。svnadmin和svnlook都是服务器端的工具,他们可以直接操作版本库服务器上的目录和文件,而不需要Subversion服务器运行。进入到刚才创建的版本库目录/var/svnroot/jproject中,可以看到里面的目录结构,如上图所示。其中的conf目录为存放配置文件的地方,等会设置认证和授权策略的时候会用到。
再来看第二个问题。只有把版本库发布到网络上,才能够让别的机器访问得到,毫无疑问需要使用一个服务器端的守护程序。在网上找一下资料,发现大部分讲Subversion服务器配置的文章都是使用的httpd服务器搭配mod_dav和mod_dav_svn模块来提供Subversion服务,我想可能是因为http协议更适合于广域网的环境吧。使用httpd配置比较复杂,如果只是在局域网内做开发,使用Subversion自带的svnserve也是不错的选择。
运行svnserve命令,带-d选项即可以作为一个单独的守护进程运行,-r选项可以指定发布哪个目录下的版本库。一旦服务器运行,就在端口3690进行监听。使用telnet可以测试到3690端口已经开放了,如下图:
这时,就可以在客户机上使用svn://192.168.1.3/jproject来连接Subversion服务器了。
最后看第三个问题。svnserve服务器运行后,当用户请求访问某个版本库的时候,svnserve会先读取版本库目录下的conf目录中的svnserve.conf文件,然后根据这个文件中的设置来决定认证和授权策略。
我的认证和授权策略很简单,认证就使用简单的用户名和密码机制,授权策略为经过认证的用户可以读些版本库、匿名用户只能读不能写。因此,这个配置文件很简单,如下:
在这个配置文件中,设置了保存用户名和密码的文件为passwd,再编辑该文件,添加两个用户,如下图:
OK,现在svnserve的设置已经基本完成,下面使用Eclipse来测试一下。在Eclipse中建立一个HelloWorld项目,在项目上点右键,在弹出菜单中选择小组-〉共享项目,然后依照提示一步一步进行即可,如下列图片所示:
点击确定,HelloWorld项目就全部被提交到Subversion版本库中了,从下图中可以看出,加入到版本库中的项目前面的图标都有所改变,只要鼠标悬停到文件上面,就会显示更改的时间和用户,真的是非常方便。
最后要说的是,svnserve提供的授权机制比较简单,对于一个用户,要么能够访问整个版本库,要么就什么也不能访问,如果要指定某个用户只能访问某些文件夹而不能访问另外的文件夹是不可能的。要想实现这样的功能,只有使用httpd。这大概也是httpd作为Subversion服务器主流的原因之一吧。