`

【转】SVN(subversion)总结

阅读更多
创建仓库:

svnadmin create /path/to/repository

修改一下配置:

vi /path/to/repository/conf/svnserve.conf

如果不是开源项目的话可能需要配置禁止匿名访问:

[general]
anon-access = none
auth-access = write
password-db = passwd

设定用户密码:

vi /path/to/repository/conf/passwd

假设创建一个密码是123456的用户laowang

[users]
laowang = 123456

注意:这个密码只用于演示,它的强度无疑是很糟糕的。

此外,还可以设定基于路径的authz认证方式,读者请自己看配置文件,这里就不多说了。

subversion有很多运行方式,比如说搭配apache使用,不过它本身也可以单独作为服务存在:

svn -d -r /path/to/repository

在客户端可以使用svn import的方法来创建项目(也可以用svn mkdir的方式来创建项目,就不多说了):

mkdir -p /path/to/project/trunk
mkdir -p /path/to/project/branches
mkdir -p /path/to/project/tags

svn import /path/to/project svn://server/project

其中,trunk,branches,tags目录并不是必须的,但多数人习惯这样,所以最好不要标新立异。

接下来就可以checkout了:

svn co svn://server/project/trunk project

开发时常用的命令很简单,基本就是更新svn up,提交svn ci之类的。

在项目开发初期,可以仅仅使用trunk来管理代码,不过一旦项目发展起来,开发时就不应该直接操作trunk了,此时应该使用branches来管理代码,比如可以使用下面的命令建立一个名为1.x的branches:

svn copy svn://server/project/trunk svn://server/project/branches/1.x

开发工作都在branches中完成,一旦完成了编码,就可以把代码合并到trunk中去:

先要查查branches是什么时候创建的:

svn log --stop-on-copy svn://server/project/branches/1.x

假设查到的版本号是123, 然后进入到trunk工作拷贝中,执行:

svn merge -r 123:HEAD svn://server/project/branches/1.x

最后提交即可:

svn commit

这还不算完,此时应该在tags里发布这个新版本(比如说版本号是1.0):

svn copy svn://server/project/trunk svn://server/project/tags/1.0

为了记牢一点,再唠叨一下trunk,branches,tags的用途:

trunk:仅保存最新的稳定代码,代码的改变尽可能通过branches来merge,而不要手动commit代码。
branches:用来管理代码的日常开发,可以手动commit代码。
tags:仅保存各个版本的代码快照,比如类似版本:1.0,1.1,1.2等等。

不同人针对同样的文件提交修改的时候,subversion会尽可能的自动合并修改,不过有的时候无法还得手动来解决冲突,有以下几种方式:

1:放弃自己的修改,转而使用服务器端的代码版本:

svn revert file.php
svn update file.php

2:使用自己的代码版本覆盖服务端的修改:

cp file.php.mine file.php
svn resolved file.php

3:手动处理<<<<<<<和>>>>>>>标识出来的冲突代码:

svn resolved file.php

有一些文件和项目本身掺杂在一起,但不适合作为版本控制的保护对象,这时应该忽略它们,比如说Smarty的模板编译目录templates_c:

svn propedit svn:ignore /path/to/templates_c

使用subversion的自动属性功能可以节省很多精力,比如说想让不同系统的用户在得到php文件的时候使用适合自己的行结束符,可以这样:

vi ~/.subversion/config

[miscellany]
enable-auto-props = yes

[auto-props]
*.php = svn:eol-style=native

注意:如果你使用的是windows操作系统,配置文件config的路径是:%APPDATA%\Subversion\config

subversion有很多钩子脚本,可以方便维护工作,其路径位于:

cd /path/to/repository/hooks

里面有很多现成的模板,比如pre-commit,post-commit,我们可以用它来实现很多效果:

比如说我们想保证所有的svn ci操作都要编写适当的日志信息,可以这样:

cp pre-commit.tmpl pre-commit

这样就够了,钩子模板缺省的内容就实现了这个效果,具体的实现内容可以参考钩子本身代码。

post-commit文件也可以有很多用途,比如说我们可以利用它来自动更新线上代码,大概的代码如下:

/usr/bin/svn update /path/to/work/copy

最后说说svn+ssh的连接方式,本文的例子基本都是使用单纯的svn连接方式,不过svn+ssh可以使用系统本身的账户作为验证方式,并且传输过程是加密的,所以更方便,更安全。

svnadmin create /path/to/repository
groupadd subversion
usermod -G subversion laowang
chgrp -R subversion /path/to/repository
chmod -R 770 /path/to/repository

进行了如上的准备工作后,就可以启动服务了:

svn -t -r /path/to/repository

然后在客户端设置配置文件:

vi ~/.subversion/config

[tunnels]
# ssh = $SVN_SSH ssh

缺省情况下,这里使用了一个名为SVN_SSH的环境变量,所以你需要设定一下它:

export SVN_SSH="/usr/bin/ssh [-p port ...]"

注意:如果是windows的花,可以使用putty中的 plink,并在环境变量中设定SVN_SSH。

设定好了之后,就可以使用svn+ssh的方式了:

svn+ssh://server/path/to/repository/...

注意,使用svn+ssh连接的时候,后面是完整的物理路径,这和单纯使用svn连接时是不一样的。

好了,subversion常用的功能基本都介绍了一遍,时不时拿出来看两眼,应该就不会忘记了。







给SVN设置代理的方法!
在C:\Documents and Settings\Administrator\Application Data\Subversion的server配置文件下找到[global]节点
然后添加
http-proxy-host = 172.100.1.28  代理ip
http-proxy-port = 8080   代理端口
http-proxy-username = haoxw   svn用户名
http-proxy-password = haoxw12   svn密码
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics