2009-02-08

Subversion的超快速入门

  前几天成功的在Sourceforge.net上面注册了一个项目,考虑到版本控制系统的诞生年代,我决定使用subversion。这个版本控制系统来管理源代码仓库(Repository),所以,稍微迅速的瞄了一眼svn的资料和使用方法,为了以后方便在这篇文章里稍微记下。如果你希望详细了解svn的话,请放轻松到这里去看整本书:http://www.subversion.org.cn/svnbook/

使用SVN的必备基本概念:
  Subversion是一个“集中式”的信息共享系统。版本库是Subversion的核心部分,是数据的中央仓库(Repository)。svn把你的源代码或者任何文档集中存储在一个仓库中,以树型目录的形式维护,可以有多个用户进入这个仓库来处理源代码。这个特性使得svn看起来就像一个文件服务器一样,那它和网络硬盘有什么不一样呢?关键之处在于svn不仅能够存储你的文件,还能够按照你更新、创建文件的时间等信息来保存你的每个修订版本。你可以在有任意需求的时候倒回到任意一个修订版本,怎么样?是不是和Google Docs的功能很像?这就是它的强悍之处。当然,据说还有很多牛逼烘烘的功能 。。不过我们初学者知道这些就够了。。这个就是版本控制。
  svn使用的版本模型:
  如果你学习过基本的编程或者操作系统的进程管理的知识你就不难理解:因为有很多人可能同时在修订某个文件的自己的版本,这个过程中,就可能产生同步化的问题,某A编辑了源码保存到仓库之后某B也编辑了源码保存到仓库,这个时候某B编辑的版本就把某A编辑的版本完全覆盖了,也就是某A这位仁兄修改了半天的结果完全作废了。
  为了解决这个问题,svn使用的模型是copy-modify-merge model也就是拷贝-修改-合并模型,这个模型使得每个用户从版本库里获得一份自己的本地项目拷贝(也就是下载一份到本地)然后修改本地项目拷贝,改完以后再向仓库申请合并修改,如果在这两个修订版之间有多个用户修改这个项目,那么svn会要求用户进行检查,最终合并到新的修订版本。

SVN的基本用法:
  好,了解了基本概念之后就可以很容易的使用svn了。一个典型的日常svn工作流程如下:

  • 更新你的工作拷贝

    • svn update :把你的工作拷贝与最新的版本同步(应该不是全部下载,而是把有被其他人更新的文件下载)

  • 做出修改(注意,这一阶段的命令都是对你本地项目拷贝的内容进行的,要更新到版本库需要你进行提交svn commit)

    • svn add :添加文件或目录或符号链接,如果你指定了一个目录,那么这个目录下的文件都会被添加,如果只想添加目录需要使用-non-recursiv参数

    • svn delete :删除文件或目录或符号链接,如果是文件夹的话,在你的本地项目拷贝里面不会立刻被删除,而是要等到你下一次提交的时候)

    • svn copy :顾名思义,拷贝东西svn copy source dest

    • svn move :顾名思义,移动东西,这里等同于拷贝后再删除

  • 检验修改(在提交之前检查一下你做过哪些修改,这些命令也对你本地工作目录进行)

    • svn status :查看修改

    • svn diff :查看修改的详细信息

使用svn status能看到一些信息,比如:

A stuff/loot/bloo.h # file is scheduled for addition
C stuff/loot/lump.c # file has textual conflicts from an update
D stuff/fish.c # file is scheduled for deletion
M bar.c # the content in bar.c has local modifications

ACDM分别代表addition conflict deletion modifications

  • 可能会取消一些修改

    • svn revert :取消修改,这个命令会把文件还原到上一次同步后的状态,当然也可以回复被你删掉的文件。

  • 解决冲突(合并别人的修改)

    • svn update :返回的结果前面的符号,U代表未改动,G代表已改动但没有重叠的地方,可以直接合并,C代表有冲突

    • svn resolved :你解决了冲突之后,使用这个命令通知服务器冲突已经解决。

  • 提交你的修改

    • svn commit

没有评论: