原帖:http://hi.baidu.com/thinkinginlamp/blog/item/1b1b20a48d422ffc9052eeda.html
学了subversion之后,我就把cvs忘得一干二净了,现在git越来越火了,在全面切换到git之前,特地总结一下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
假设创建一个密码是<password>的用户<username>
[users]
<username> = <password>
此外,还可以设定基于路径的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
假设查到的版本号是<version>, 然后进入到trunk工作拷贝中,执行:
svn merge -r <version>: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
这样就够了,钩子模板缺省的内容就实现了这个效果,具体的实现内容可以参考钩子本身代码。
说到日志信息,随便唠叨一下,写日志信息的时候不要写诸如把a改成b之类的东西,因为通过svn diff可以很容易知道你做了哪些改变,而应该写为什么做这些改变,这样的日志信息才是有意义的。
post-commit文件也可以有很多用途,比如说我们可以利用它来自动更新线上代码,大概的代码如下:
/usr/bin/svn update /path/to/work/copy
此外,要注意在Web服务器上保护.svn目录,不然就不安全了,如果是apache的话,可以这样:
<DirectoryMatch "/\.svn/">
Order allow,deny
Deny from all
</DirectoryMatch>
最后说说svn+ssh的连接方式,本文的例子基本都是使用单纯的svn连接方式,不过svn+ssh可以使用系统本身的账户作为验证方式,并且传输过程是加密的,所以更方便,更安全。此外,使用svn+ssh的方式,你连服务都不用启动了,因为已经通过ssh转换成类似本地的file://操作了。
svnadmin create /path/to/repository
groupadd subversion
usermod -G subversion <username>
chgrp -R subversion /path/to/repository
chmod -R 770 /path/to/repository
在客户端查看配置文件:
more ~/.subversion/config
[tunnels]
# ssh = $SVN_SSH ssh
缺省情况下,这里使用了一个名为SVN_SSH的环境变量,所以你需要设定一下它:
export SVN_SSH="/usr/bin/ssh [-p port ...]"
注意:如果是windows,可以使用putty中的plink,或者使用TortoisePlink,并在环境变量中设定SVN_SSH。
设定好了之后,就可以使用svn+ssh的方式了:
svn+ssh://server/path/to/repository/...
注意,使用svn+ssh连接的时候,后面是完整的物理路径,这和单纯使用svn连接时是不一样的。
好了,subversion常用的功能基本都介绍了一遍,时不时拿出来看两眼,应该就不会忘记了。
分享到:
相关推荐
#### 总结 Subversion作为一款成熟且功能强大的版本控制系统,在软件开发领域有着广泛的应用。它不仅提供了一套完整的版本管理工具,还通过丰富的插件生态系统进一步扩展了其功能。对于寻求稳定、可靠的版本控制...
总结,Subversion 1.8.10是一个强大且成熟的版本控制系统,提供高效的合作环境,帮助开发者管理项目变更,确保团队间的协作和代码一致性。通过正确配置和使用Subversion服务器,可以显著提升软件开发的效率和质量。
总结,配置Subversion 1.6.6 + Apache 2.2.14 + TortoiseSVN 1.6.6的关键步骤包括安装Subversion服务器组件,配置Apache的`httpd.conf`以启用DAV和SVN支持,创建用户认证文件,以及安装TortoiseSVN客户端。...
使用Subversion进行版本控制针对 Subversion 1.4(根据r2866编译) 参照网页版 http://svndoc.iusesvn.com/svnbook/1.4/制作而成。 目录 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书的结构 本书是...
#### 三、总结 通过以上步骤,您可以成功安装Subversion ZIP 版本,并配置好必要的环境变量及服务,从而能够在本地或网络环境中使用Subversion进行版本控制。对于初学者来说,了解这些基础知识非常重要,因为它们是...
总结,Subversion 1.6.17是一个强大且易用的版本控制系统,尤其适合团队协作的场景。通过安装和掌握其核心功能,可以显著提高工作效率,保障项目的版本管理和协同开发。虽然当前版本相对较旧,但对于初学者和小规模...
#### 总结 企业级Subversion解决方案是Wandisco作为Subversion官方开发者提供的产品,它能够满足现代企业研发的各种需求。从确保全球研发中心的持续运行到提高开发效率,再到实现高可靠性与高可用性,Wandisco的解决...
### Subversion for Windows安装指南知识点总结 #### 一、Subversion概述 - **定义**: Subversion,简称SVN,是一种集中式的版本控制系统。它通过跟踪文件和目录的变化历史,允许团队成员协同工作,并且可以回溯到...
总结,Subversion 1.10.6的源码提供了深入了解版本控制系统的绝佳机会。通过编译源码,不仅可以学习其内部机制,还能为定制化需求打下基础。在实际操作中,遵循正确的编译步骤,处理好依赖关系,可以顺利完成...
在IT行业中,版本控制系统...总结起来,这个过程涉及了Subversion的安装、配置、仓库创建和Apache HTTPD的集成,这些步骤是搭建Linux下SVN环境的关键。通过遵循上述指南,你可以有效地管理你的代码版本,提高开发效率。
#### 六、总结 通过上述步骤,可以顺利完成Subversion的安装、配置以及服务端的启动,为团队协作提供了基础支持。需要注意的是,在实际部署过程中,还需根据具体的网络环境和服务需求进行相应的调整和优化。
总结,Subversion 1.5.6 是一个可靠的版本控制系统,适用于各种项目管理需求,无论是在Windows还是Unix-like系统上,都有相应的部署和使用方式。通过源码包和预编译的二进制包,开发者可以方便地安装和使用...
#### 八、总结 Subversion作为一种集中式的版本控制系统,在替代CVS的过程中取得了显著的成功。它不仅解决了CVS存在的一些关键问题,而且还引入了许多新特性以提高效率和可靠性。尽管近年来分布式版本控制系统如Git...
**总结** Subclipse作为Eclipse的Subversion插件,为开发者提供了一个强大且便捷的工具,使得在Eclipse环境中进行版本控制变得简单。通过安装和配置Subclipse,开发者能够高效地管理代码版本,协同工作,同时享受到...
总结,Subversion 1.6.17是一个可靠的版本控制系统,其依赖关系包括APR、APR-Util、Serf等关键库。正确理解和管理这些依赖关系是成功安装和运行Subversion的关键。同时,了解如何配置和使用Subversion对于任何软件...
总结,Subversion Edge是Subversion版本控制系统的强大伴侣,通过其直观的Web界面,简化了在Windows和Linux系统上的安装和管理。无论你是初学者还是经验丰富的IT专业人员,都能快速上手并充分利用其功能。记得定期...
总结,"subversion-1.6.13.tar.gz"包含的是Subversion 1.6.13版本的源代码,可以用于安装和自定义配置。了解其基本概念、使用方法和与其他版本控制系统的对比,将有助于你更有效地管理代码版本。
知识点总结: * 安装 OpenSSL、zlib 和 Apache 等依赖包 * 安装 Subversion 并配置依赖包 * 配置 Subversion 服务器 重要提示: * 安装过程中可能会报错,需要安装 gcc。 * 需要在有网的环境下执行 get-deps.sh ...
总结,Subversion 1.5.6的安装与配置是一个涉及多个步骤的过程,包括安装Subversion客户端和服务端,配置Apache服务器,创建仓库,以及管理用户权限。理解并熟练掌握这些步骤,对于团队协作开发至关重要,能有效提高...
#### 总结 通过将 Subversion 与 Apache 结合使用,可以构建出一个既强大又安全的版本控制系统。这样的系统不仅可以提高开发效率,还能有效地保护项目源代码不受未经授权的访问和攻击。对于希望采用现代化版本控制...