我的linux编程之旅-配置svn

原创:hkcat2006

转眼5月份了,时间不知不觉就过去了,明天要去学校拍毕业照了。可能是大家最后一次聚在一块了。还差5个月就09年了。一切都过得这么快。从这个月开始学linux下c编程了。已经没有时间再等下去了。昨天架了下svn服务器,今天把linux系统管理方面的知识理一下。明天去图书馆借本书,就开工吧。争取一天发一篇总结,以示督促吧。

debian下架设apache+svn服务器

** 安装

单机的Svn,用svnadmin建立一个仓库,然后用svn的相关命令来操作。访问方式为file://

apt-get install subversion subversion-tools

svnadmin create /home/svnCore 建立一个仓库

svn import /home/Work/python file:///home/svnCore 将/home/svnCore导入到仓库中




** apache svn

安装apache2,libapache2-svn

先添加一个组svnUser,然后将www-data加到这个组中,www-data就是apache的用户。

因为是要从浏览器访问svn仓库,所以www-data是一定要加入到svnUser中去的。

然后建立仓库

svnadmin create /home/svnCore/Project

设置Project权限

chgrp -R svnUser /home/svnCore/Project

chmod -R g+rws /home/svnCore/Project

就是允许svnUser组的成员可以对svn目录进行读写

设置apache的配置文件

emacs /etc/apache2/mods-available/dav_svn.conf

<Location /svn/Project> #这里是虚拟目录名称

DAV svn

SVNPath /home/svnCore/Project #这个是仓库所在位置

AuthType Basic #认证类型

AuthName "Subversion Repository"

AuthUserFile /etc/subversion/passwd #访问仓库的密码验证文件

<LimitExcept GET PROPFIND OPTIONS REPORT> #这三行允许匿名访问

Require valid-user

</LimitExcept>

</Location>

在配置文件中要指明通过Web访问的目录和Svn仓库路径,同时要设置验证文件

下面生成验证文件

新建一个密码文件,用户名是hkcat, -c代表如果不存在就新建

sudo htpasswd -c /etc/subversion/passwd hkcat

然后sudo /etc/init.d/apache2 restart

现在可以用firefox访问一下http://localhost/svn/Project 看看能不能打开

导入一个项目

svn import -m "svn test" ~/Learn/python http://localhost/svn/Project

网上有好几篇apache+svn的文章了,原理其实就是用svn建立一个仓库,然后就是在apache中svn的模块中配置下虚拟目录和仓库位置及访问方式。

** 项目管理两种模式:

一个仓库一个项目:

缺点是比较麻烦,比如在apache中,每加一个项目都要配置个虚拟目录和权限。优点是单个仓库中单个项目容易管理.

一个仓库多个项目:

缺点是该仓库中的每个项目的版本是随着总仓库更改而递增的,而不是自身项目改变的版本。优点是比较简单吧,所有的项目都放一块了,便于管理。而且在apache中也比较容易配置。会show log时会发现版本从1一下子到5,其它这是整个仓库改变的版本,而不是当前这个目录改变的版本。第一次用svn时,有一次提交。就发现版本号一下子跳上去了。当时,还以为把公司的代码弄乱了,呵呵,后来还是主管告诉我这点的。

最后决定

建立3个仓库

config

保留配置文件的版本。这样修改.fvwm2rc和.emacs就方便多了。还有其它的配置文件都可以控制了。这里采用一库多项目的形式,因为配置文件的修改只要求日志就行了。不需要对版本太过关心的。再加上配置文件多而杂,没必要建很多个虚拟目录的。

LearnProject

这里主要对一些练习程序进行版本控制,还是采用一个仓库对应多个项目的方式。还有一些对开源项目的代码分析也放这里吧。

Project

这里主要是一些自己的项目了,采用一个仓库对应一个项目的方式,这样便于管理,而且也比较清晰。虽然每新增一个项目要加个虚拟目录,但其实也没几个自己的项目的,呵呵。

** emacs里面操作svn

checkout还不知道用什么命令

都要在含有.svn的目录下面使用,所以需要手工的svn checkout

C-x v v checkin ,按第二下的时候会要求输入注释。注释输入结束按C-c C-c 提交

C-x v = 比较功能,显示当前和仓库里的不同

C-x v u 更新工作拷贝,放弃当前的修改

C-x v d 打开工作目录, vv 在dired下面提交

C-x v l 显示更改日志

C-u C-x v = 不同版本的比较

C-x v ~ 显示指定版本

M-x vc-update 更新

M-x vc-resolve-conflicts 调用ediff修改冲突文件

也可以用命令

M-! svn resolved test1.c 修改冲突,去掉那些<<<<<<标记

其它插件

psvn http://www.xsteve.at/prg/emacs/psvn.el 暂时还没实验。

记笔记就采用muse吧,本来想用wikidpad的,个人比较喜欢他在笔记中穿插todo和action的概念,,感觉这种设计很棒,但可惜对输入法支持一直有问题。

前阵子,因为/没多少空间了,懒得整理,直接format了。后来装了下ubuntu 7.10。安装和使用的过程全都很简单呵呵,难怪这么流行。irc上#ubuntu-cn的人总有那么多。能把linux做得那么易用,也确实有水平。但可惜,我机子适乎不喜欢ubuntu,开个vbox运行个xp就卡的要命了。打开oo又那么慢。没办法。只好重回fvwm。重回我的debian。貌似我是与gnome和kde无缘了。什么时候弄个slackware耍耍,不过每个软件包都要编译呵呵,也确实太累了。

先到这吧,明天去图书馆借本书,开始我的linux编程之旅。