http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251581.html
svn 的常见操作 import
0 前言
Subversion是一个免费的开源的版本管理系统,它是作为CVS(Concurrent Versions System)的取代品出现的。本文简单介绍了Subversion在Fedora上的安装过程及其基本概念和使用方法。您可以到O'Reilly出版的 开源书籍Version Control with Subversion的主页在线阅读(中、英文版本都有),以获取更多信息。
1 在Fedora上安装Subversion
[aaronwong@localhost ~]$ sudo yum -y install subversion [aaronwong@localhost ~]$ rpm -ql subversion //上面的命令可查询subversion软件包在系统上所安装的文件列表 [aaronwong@localhost ~]$ sudo yum -y install mod_dav_svn //mod_dav_svn不是必须安装的,它是Apache HTTP Server的一个插件,你本地仓库(repository)的文件必须通过它才能在网络上与别人共享。 //subversion的组件列表点此查看。 [aaronwong@localhost ~]$ svn --version svn,版本 1.4.3 (r23084) 编译于 Mar 23 2007,09:29:55 版权所有 (C) 2000-2007 CollabNet。 Subversion 是开放源代码软件,请参阅 http://subversion.tigris.org/ 此产品包含由 CollabNet (http://www.Collab.Net/)开发的软件。 可使用以下的仓库存取 (RA) 模块: * ra_dav : 通过WebDAV(DeltaV)协议访问仓库的模块。 - 处理“http”方案 - 处理“https”方案 * ra_svn : 使用svn网络协议访问仓库的模块。 - 处理“svn”方案 * ra_local : 访问本地磁盘的仓库模块。 - 处理“file”方案 |
2 使用Subversion管理本地project
作为程序开发人员,我们没有必要了解Subversion的所有特性的方方面面,我们的目的是使用它来对我们的project进行方便的简单的版本管理,因此,强烈推荐阅读Subversion Quick-Start Guid和Basic Usage。
以下是笔者参照上述Guide进行一个简单的本地project的版本管理的示例。假定工程名为hello。
(1)建立本地工程hello的subversion仓库
Subversion把工程的各个版本的数据集中放在一个仓库(repository)中。假定我们要建立一个本地工程,叫做hello,为了使用subversion对它进行版本管理,首先要为该工程建立一个仓库。
[aaronwong@localhost ~]$ svnadmin create .subversion/repos/hello //subversion安装后会生成一个~/.subversion目录,这里,我们将工程hello的数据仓库建立在~/.subversion/repos/hello目录。 [aaronwong@localhost ~]$ ls -p .subversion/repos/hello/ conf/ dav/ db/ format hooks/ locks/ README.txt |
(2)按照subversion的要求组建本地工程hello的工作目录
假定工程hello的顶层目录为~/projects/hello(这里~代表/home/aaronwong/),则应如下组建工程的工作目录:
~/projects/hello/branches ~/projects/hello/tags ~/projects/hello/trunk/ hello.c |
//trunk目录是实际上的工程顶层目录,工程中的所有文件和文件夹都在该目录下组织。 [aaronwong@localhost ~]$ cd projects/hello/ [aaronwong@localhost hello]$ ls -p branches/ tags/ trunk/ [aaronwong@localhost hello]$ cat trunk/hello.c //This isa originalversion. #include <stdio.h> int main() { printf("Hello world!\n"); } |
(3)将本地工程hello导入本地的Subversion的工程仓库
由于是首次导入,因此要加信息-m "initial import"。
[aaronwong@localhost trunk]$ svn import ~/projects/hello/ file:///home/aaronwong/.subversion/repos/hello/ -m "initial improt" 新增 /home/aaronwong/projects/hello/trunk 新增 /home/aaronwong/projects/hello/trunk/hello.c 新增 /home/aaronwong/projects/hello/branches 新增 /home/aaronwong/projects/hello/tags 提交后的版本为 1。 |
注意,完成导入后,原目录~/projects/hello并不转换为“工作副本(working copy)”,而且该项目已经转由该仓库接管,即该仓库中已经包含了首次导入的工程的所有信息,与源目录~/project/hello再无任何关系,我 们完全可以删除这一目录而不必担心丢失工程项目数据。注意,如果源目录并不是一个“工作副本”,那么就无法用svn进行管理,在其中所作的任何变动都无法 提交到仓库。
要用subversion对工程进行版本管理,那么工程项目的开发必须在一个“工作副本”中进行,即首先要从仓库获取一个“工作副本”。
(4)工程开发过程中的版本管理与控制
使用subversion对工程进行版本管理的一般流程如下:
a)建立工程的数据仓库,并导入工程的最初版本(前面已经完成);
b)从仓库获取一个“工作副本”(svn checkout,可以获取最新版本也可以获取以前的某个版本),在这个“工作副本”中进行工程开发,修改完毕将变动提交到仓库。
下面简单介绍b)步骤。
由于工程hello已经导入到仓库,因此原目录可以删除。我们删除原目录,并从仓库获取工程hello的一个“工作副本”(working copy);当然,如果你当心这样做会造成数据丢失,完全可以重新建立一个目录,将“工作副本”保存到那里。
[aaronwong@localhost projects]$ rm -rf hello/ [aaronwong@localhost projects]$ svn checkout file:///home/aaronwong/.subversion/repos/hello/trunkhello A hello/hello.c 取出版本 1。 //注意,我们用红色标出了"trunk",如果不指定这一目录,则会取出除工程源文件外的其他不必要的目录如branches和tags。 [aaronwong@localhost projects]$ ls -a hello/ . .. hello.c .svn //可以看到“工作副本”下有一个.svn隐藏目录,其中就包含了subversion用來进行版本管理的信息。 |
下面可以对工程hello的内容进行编辑和修改。注意,如果要在工程中增加或删除某一文件或目录(包括复制和移动),必须使用svn add/delete/mkdir/copy/move等相关命令进行标记。
[aaronwong@localhost hello]$ pwd /home/aaronwong/projects/hello [aaronwong@localhost hello]$ vim hello.c [aaronwong@localhost hello]$ cat hello.c //This isthe secondversion. #include <stdio.h> int main() { printf("Hello world!\n"); return; } [aaronwong@localhost hello]$ mkdir doc [aaronwong@localhost hello]$ vim doc/readme.txt [aaronwong@localhost hello]$ svn add doc A doc A doc/readme.txt //说明:如果svn add的对象是一个目录,则该目录及其子目录和其下的文件都会被添加到工程。 |
对工程编辑完毕,你可以检查一下该次编辑对工程(实际上是对你的"工作副本")做了哪些改动。
[aaronwong@localhost hello]$ svn status M hello.c A doc A doc/readme.txt [aaronwong@localhost hello]$ svn diff Index: hello.c =================================================================== --- hello.c (版本 1) +++ hello.c (工作副本) @@ -1,10 +1,10 @@ -//This is a original version. +//This is the second version. #include <stdio.h> int main() { printf("Hello world!\n"); - + return; } Index: doc/readme.txt =================================================================== --- doc/readme.txt (版本 0) +++ doc/readme.txt (版本 0) @@ -0,0 +1,2 @@ +This is an example for subversion tutorial. + //可以看到,svn diff提供了更详细的改动信息,并且很容易的将该命令的输出重定向为一个patch补丁。 |
检查确认无误后,便可提交此次更改,同时要附加此次更改的说明注释信息。
[aaronwong@localhost hello]$ svn commit -m "documents added." 新增 doc 新增 doc/readme.txt 正在发送 hello.c 传输文件数据.. 提交后的版本为 2。 |
现在工程仓库中已经保存了上面所提交的版本2的工程的所有信息,因此,上面的“工作副本”也可以被删除:当然,如果下次你还要继续使用这个“工作副本”进 行工作,则可以保留这个副本,不过需要注意的是,如果你是在一个开发团队中,开发团队的任一成员都可能在你不知情的情况下更新了工程版本,因此,在团队开 发中,进入已有的“工作副本”进行编辑前,应该先使用"svn update"命令将当前“工作副本”更新到仓库中的最新版本。
3 使用svn获取开源项目源代码
这实际上是获取一个“工作副本”的过程。例如我需要下载ffmpeg的最新源代码,就可以使用svn checkout命令来完成:
[aaronwong@localhost ~]$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg A ffmpeg/configure A ffmpeg/Doxyfile A ffmpeg/ffmpeg.c A ffmpeg/vhook A ffmpeg/vhook/imlib2.c A ffmpeg/vhook/drawtext.c A ffmpeg/vhook/fish.c A ffmpeg/vhook/null.c ...... |
这篇文章仅仅是Subversion的使用入门,其实它的功能非常丰富和强大,如果你已经对它产生了兴趣,强烈推荐您阅读subversion在线书籍,您还可以进入网络社区或论坛与朋友进行更深入的讨论。
相关推荐
SVN搭建和使用手册,svn中文教程,SVN客户端使用简要教程
svn搭建方法。搭建Windows SVN服务器及TortoiseSVN使用帮助和下载
客户端和服务端的详细配置,以及使用方法和注意事项
使用svn可进行对代码进行有效管理 避免了版本的混乱和无序
详细介绍了eclipse如何搭建svn项目管理工具,有svn项目密码设置,svn发布,下载
redhat5.4 SVN搭建 web同步 redhat5.4 SVN搭建 web同步 redhat5.4 SVN搭建 web同步 redhat5.4 SVN搭建 web同步 redhat5.4 SVN搭建 web同步
SVN搭建
SVN搭建与创建 SVN安全机制 SVN备份恢复机制 客户端使用方法
主要是Svn搭建,主要操作步骤和流程
svn搭建服务端说明,详细说明了如何在电脑上搭建SVN环境,给团队开发提供SVN版本控制功能
svnframebufferframebufferframebufferframebufferframebufferframebufferframebufferframebufferframebufferframebufferframebuffer
linux下svn搭建文档。
svn搭建https访问之mod_dav_svn安装包 linux安装包 搭建https访问
详细的svn搭建流程,按操作步骤进行即可。
NULL 博文链接:https://thingkau.iteye.com/blog/546295
持续集成环境maven+nexus+jenkins+svn搭建
svn搭建及HUDSON