SVN 版本控制

Posted ZhangDreamK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN 版本控制相关的知识,希望对你有一定的参考价值。

SVN

虽然我们现在 大部分管理版本都是用Git 但是SVN也是我们会用到的一种版本控制系统

那SVN怎么使用呢
接下来我会简单介绍一下它的用法

在Mac环境下,由于Mac自带了SVN的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用SVN功能,不过还需做一下简单的配置。

为什么使用SVN

  1. 进行权限管理,针对不同的人,开放不同的权限。比如Alex是进行A项目的,Bob进行B项目的,那么SVN可以有效的管理每个人看到的项目,Alex不可能获得Bob的项目,同样Bob也不可能获得Alex的项目。
  2. 对于代码进行追踪,代码不会遗失。不如今天代码修改乱了,需要恢复到某一天的,那么我们只需要选择一下恢复的日期即可进行恢复。

搭建SVN服务器

1. 创建代码仓库,存储客户端上传的代码

先在~/Desktop目录(这个目录可以是任意非中文路径)新建一个svn目录,以后可以在svn目录下创建多个仓库目录。

打开终端,切换到该目录cd ~/Desktop/svn,创建一个learnsvn仓库,输入命令:svnadmin create ./learnsvn,执行成功后,会发现在该目录下多了一个LimitFree目录。

2. 配置SVN的用户权限

主要是修改./learnsvn/conf目录下的三个文件

  • 打开svnserve.conf,将下列配置项前面的#和空格都去掉

    
    # anon-access = read  
    
    
    # auth-access = write  
    
    
    # password-db = passwd
    
    
    # authz-db = authz
    

    anon-access = read代表匿名访问的时候是只读的,若改为anon-access = none代表禁止匿名访问,需要帐号密码才能访问

  • 打开passwd,在[users]下面添加帐号和密码

    [users]
    
    # harry = harryssecret
    
    
    # sally = sallyssecret
    
    chaosky = 123
    student = 123456

    帐号是chaosky,密码是123

  • 打开authz,配置用户组和权限

    我们可以将在passwd里添加的用户分配到不同的用户组里,以后的话,就可以对不同用户组设置不同的权限,没有必要对每个用户进行单独设置权限。

    在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开

    [groups]  
    topgroup=chaosky,student

    说明chaosky和student都是属于topgroup这个组的,接下来再进行权限配置。

    使用[/]代表svn服务器中的所有资源库

    [/]  
    @topgroup = rw

    上面的配置说明topgroup这个组中的所有用户对所有资源库都有读写(rw)权限,组名前面要用@

    如果是用户名,不用加@,比如chaosky这个用户有读写权限

    [/]  
    chaosky = rw

3. 启动SVN服务器

在终端输入命令:svnserve -d -r ~/Desktop/svnsvnserve -d -r ~/Desktop/svn/learnsvn

没有任何提示就说明启动成功了

4. 关闭SVN服务器

打开活动监视器,输入svnserve,强制退出进程。

使用SVN客户端功能

SVN客户端有两种使用方式,命令行和GUI界面软件(CornerStone)

命令行工具

usage: svn <subcommand> [options] [args]
Subversion command-line client.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
  or 'svn --version --quiet' to see just the version number.

Most subcommands take file and/or directory arguments, recursing
on the directories.  If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.

Available subcommands:
   add
   auth
   blame (praise, annotate, ann)
   cat
   changelist (cl)
   checkout (co)
   cleanup
   commit (ci)
   copy (cp)
   delete (del, remove, rm)
   diff (di)
   export
   help (?, h)
   import
   info
   list (ls)
   lock
   log
   merge
   mergeinfo
   mkdir
   move (mv, rename, ren)
   patch
   propdel (pdel, pd)
   propedit (pedit, pe)
   propget (pget, pg)
   proplist (plist, pl)
   propset (pset, ps)
   relocate
   resolve
   resolved
   revert
   status (stat, st)
   switch (sw)
   unlock
   update (up)
   upgrade

Subversion is a tool for version control.
For additional information, see http://subversion.apache.org/

CornerStone

添加代码仓库

填写SVN仓库信息

基本操作

checkout(检出)

add(添加文件)

delete(删除文件)

modify (修改文件)

commit(提交)

update(更新)

resolve conflict(解决冲突)

revert(恢复初始状态)

SVN vs Git (集中式 vs 分布式)

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

http://www.liaoxuefeng.com/files/attachments/001384860735706fd4c70aa2ce24b45a8ade85109b0222b000/0

集中式版本控制系统最大的毛病就是必须联网才能工作。

那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

http://www.liaoxuefeng.com/files/attachments/0013848607465969378d7e6d5e6452d8161cf472f835523000/0

总的来说 大家还是比较倾向于使用 Git 推荐大家都使用Git来对自己的项目进行控制

以上是关于SVN 版本控制的主要内容,如果未能解决你的问题,请参考以下文章

一小时精通SVN版本控制 之三 客户端的操作

SVN(一次检出&二次检出)

Linux学习闲谈 ——SVN版本控制拾遗

phpstorm使用svn提交, locked

成功检出 svn 文件,但在导航器和源代码控制实用程序区域中均未显示 SCM 状态

svn检出的时候不停的跳出认证窗口,怎么输入都没有用,求教大虾们啊!