SVN版本控制

作者: goyohol | 来源:发表于2017-10-09 11:27 被阅读52次

很久以前用的SVN管理代码!!!许久没使用了,老知识回顾!!!
按照自己惯例,一篇文章!!!😂😂😂😂😂




版本控制(Version Control)的作用:追踪文件的变化。

文件备份
文件名中存储版本号或者日期
多人编辑的环境下,共享一个文件目录,要求每个人编辑完以后,在文件上出所需的标识


版本控制系统:

简称:VCS,也叫做“文件数据库”,追踪 文件变化,避免出现混乱。


版本库:

版本库又名仓库,英文名:repository
可以理解成一个目录,这个目录里面所有文件都可以被版本控制系统管理,各文件的“修改”、“删除”都能跟踪,以便何时都可以追踪历史,在将来任一时刻都可“还原”。



Git与SVN区别:

Git:每个人电脑里都有完整的版本库
分布式:Git


SVN:版本库是集中存放在中央服务器。
集中式:SVN

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



SVN

Windows环境下,一般使用“TortoiseSVN”;
Mac环境下,由于Mac自带SVN服务器端客户端功能,所以不安装任何第三方软件就可以使用 SVN功能,需要做一些简单配置


搭建SVN服务器

先在任一目录(/User/gyh/)下新建一个SVNs目录,以后就可以在SVNs目录(/Users/gyh/SVNs)下创建(放置)多个仓库目录。

打开终端,创建一个repoOfmy仓库,输入指令:svnadmin create /Users/gyh/SVNs/repoOfmy
指令执行成功后,硬盘上多一个“/Users/gyh/SVNs/repoOfmy目录,其目录结构如下:




配置svn用户权限:(conf文件夹)
在“/Users/gyh/SVNs/repoOfmy/conf/”目录下,有3个权限文件: authzpasswdsnvserve.conf
GYHdeMacBook-Pro:conf gyh$ ls
authz hooks-env.tmpl passwd svnserve.conf

  • 打开authz:用户权限分配内容 (vi authz
    # 用户组 (添加用户组成员
    [groups]
    # admins是组名,admin是组员(可以写多个,用“,”分隔。如:admins=admin,gyh,coco)
    admins=admin
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe

    # 设置目录权限成员权限设置)
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    [/]
    @admins=rw # 意思是:admins组里面的成员都有rw的权限,rw:读写权限, 也可以写成admin=rw,只赋予admin用户有读写权限
    # 这里如果不写,代表:下一级目录的用户不具备继承关系,也就是没有访问的权限。
    * = r:别的用户只能读; * = rw:其他的用户也有继承关系(具备读/写权限)

  • 打开passwd:配置svn用户密码vi passwd
    [users]
    # 与authz的用户名对应,后面是用户密码
    admin=abc123

    # harry = harryssecret
    # sally = sallyssecret

  • 打开svnserve.conf:svn的配置信息 (vi svnserve.conf
    配置项如下: (#空格都去掉)
    # anon-access = read #匿名用户有读的权限
    # auth-access = write #登录用户的写的权限

    # 关联passwd(需要放开注释)
    # password-db = passwd
    # 关联authz (需要放开注释)
    # authz-db = authz
    最终:
    # 禁用匿名用户读的权限
    anon-access = none
    # 登录用户有写的权限
    auth-access = write

    # 关联passwd.
    password-db = passwd
    # 关联authz
    authz-db = authz


启动 svn服务器: [ ]( svnserve -d -r /Users/gyh/SVNs )
GYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNsGYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNs/repoOfmy
(不能再加“/mycode”的子目录,否则导入代码会长时间没反应)

重复 启动服务器,会报错:
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
svnserve: E000048: Can't bind server socket: Address already in use



关闭 svn服务器



这样就搭建了svn服务器环境。


使用svn客户端功能

1.从本地导入(import)代码到服务器 (第一次:初始化导入)

格式:svn import 工程的路径 服务器地址 --username=用户名 --password=密码 -m "注释内容"

例子:
svn import /Users/gyh/Documents/project svn://localhost/ios/project --username=gyh --password=abc123 -m "初始化导入"

svn import /Users/gyh/Documents/project https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化导入" (https:对应的服务器地址)

将“/Users/gyh/Documents/project”中的所有内容上传到服务器ios仓库project目录下(后面双引号中的"初始化导入"是注释)。



2.从服务器端 下载代码到客户端本地checkout

格式:svn checkout 服务器地址 --username=用户名 --password=密码 存储在本地的路径

例子:
svn checkout https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化导入" /Users/gyh/Desktop/project (https:对应的服务器地址)

将服务器中project仓库的内容下载到本地的“/Users/gyh/Desktop/project”目录中。

svn import /Users/gyh/Desktop/Company/svnDocuments https://123.45.67.890/svn/res/项目文档 --username=gyh --password=abc123 -m "import first"
500 svn checkout https://123.45.67.890/svn/res/项目文档 --username=gyh --password=abc123 /Users/gyh/Desktop/Company/svnDocuments



3.提交 (commit) 已经更改过代码到服务器 (文件路径的修改)

  • <1>.先定位到“/Users/gyh/Desktop/project”目录
    cd /Users/gyh/Desktop/project”
  • <2>.输入提交指令
    格式:svn commit -m "修改的内容"

例子:

cd /Users/gyh/Desktop/project”
svn commit -m "修改了plist文件"

将“/Users/gyh/Desktop/project”下的所有修改同步服务器端



4.更新服务器端的代码到客户端svn update
cd /Users/gyh/Desktop/project”
svn update



5.svn其他用法svn help

GYHdeMacBook-Pro:ios gyh$ svn help
 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/

其中,括号中的内容 一般代表着指令简称
比如:用svn ci代替svn commit,用svn co代替svn checkout




SVN的步骤:

svn add * // 添加所有路径


最简步骤:
<1>.先定位到“/Users/gyh/Desktop/project”目录
cd /Users/gyh/Desktop/project”
<2>.输入提交指令
格式:svn commit -m "修改的内容"



标准步骤:

a. repository(源代码库):源代码统一存放地方

b. Checkout (提取):当你手上没有源代码的时候,你需要从repository里checkout一份
svn checkout svn地址

c. Commit(提交):当你已经修改了代码,你就需要Commit到repository
svn commit -m "修改的内容"

d. Update(更新):当你已经Checkout了一份源代码, Update一下,就可以和Repository上的源代码进行同步,手上的代码就会有最新变更


开发过程
已Checkout好的代码 → Update(获得最新的代码) → 作出自己的修改并调试成功 → Commit(提交后,大家就可以看到你的修改)


多人开发:(跟git类似)
如果程序员同时修改了同一个文件,SVN可以默认Merge这两个程序员的改动。(Merge合并
实际上SVN管理源代码是以“”为单位的:
两个程序员只要修改的不是程序的同一行,SVN都会自动合并两种修改;
如果是同一行呢,SVN会提示:文件Confict(冲突)。需要手动确认、解决。




参考:
SVN子命令add用法浅析

MAC下SVN的常用命令
subversion的使用总结





常见报错,参考:






goyohol's essay

相关文章

  • TortoiseSVN与VisualSVN Server搭建SV

    TortoiseSVN与VisualSVN Server搭建SVN版本控制系统 本片主要介绍如何搭建SVN版本控制...

  • SVN命令行

    从svn仓库中取出 svn checkout svn://localhost/仓库名 svn加入版本控制 svn ...

  • SVN使用知识总结

    一. SVN和Git区别 SVN : 集中式的版本控制工具Git : 分布式的版本控制工具 二. SVN介绍 SV...

  • Git和SVN的区别详解

    简介 SVN SVN属于集中化的版本控制系统,必须联网才能工作。有个不太精确的比喻:SVN = 版本控制+ 备份服...

  • SVN浅析

    SVN,一个版本控制系统,用于团队协作开发。 版本控制: 标记不同的版本需要使用编号,SVN使用Revision来...

  • Git

    1,Git和SVN都是版本控制工具,那么他们得区别是什么呢? 1 ). Svn 特点SVN是集中式版本控制系统,版...

  • AndroidStudio提取SVN信息到APP版本信息中

    使用SVN进行版本控制时,可以在SVN仓库目录下用控制台命令 svn info,获取当前版本库的相关信息 利用这一...

  • SVN 基础记录

    @(版本控制)[svn] 前言 毕业后在 mz 版本控制一直用 git, 这段时间换到 tx, 使用的 svn,开...

  • 为什么使用GIT

    SVN与GIT的区别 概念SVN:集中化的版本控制系统GIT:分布式版本控制系统 文件记录方式SVN:记录每个文件...

  • 为什么使用git

    SVN与GIT的区别 概念SVN:集中化的版本控制系统GIT:分布式版本控制系统 文件记录方式SVN:记录每个文件...

网友评论

    本文标题:SVN版本控制

    本文链接:https://www.haomeiwen.com/subject/mowqlxtx.html