源代码管理之SVN

  • 全称Subversion,集中式版本控制,所有的代码都集中在一块, 统一进行管理
  • 作用:代码回滚,代码合并,版本备份,权限控制,责任追究......

一、环境

  • 服务器环境:用于存储客户端上传的源代码。可以在Windows上安装Visual SVN Server软件或者Mac下:由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简单的配置......
  • 客户端环境:上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步。可以在Mac上使用命令行、Versions、Cornerstone、Xcode等可视化图形界面

二、UNIX基本命令

  • help [子命令] : 查看某一个具体的子命令的使用方法
  • cd path ==改变当前目录至path路径
  • pwd ==查看当前所在路径
  • ls ==查看当前路径下所有文件文件夹
  • touch filename filename2 创建一个或者多个文件,例如touch person.h person.m
  • rm person.h ==(p按table自动补全)删除文件
  • open person.m ==打开文件 open . 打开当前文件夹 open..打开上层文件夹
  • cat person.m ==查看文件内容,显示在终端里
  • more person.m==分页查看文件内容
  • mkdir 文件夹名称 ==创建一个文件夹
  • mv oldFilePath newFilePath ==移动文件(可借助此方法给文件重命名)例如mv person.m mine/person2.m(person.m 和mine文件夹在当前操作目录home文件夹下)
  • .当前文件夹目录..代表上级目录 例如(操作目录在2.m)mv person2.m ../person.m
  • .movie代表隐藏文件文件夹 可用touch,mkdir 创建
  • defaults write com.apple.finder AppleShowAllFiles YES &&killall Finder显示隐藏当前目录下的文件文件夹(YES,NO)

三、SVN版本控制中,各个文件状态

' ' 没有修改
'A' 被添加到本地版本控制
'C' 冲突
'D' 被删除(通过svn命令删除的文件)
'I' 被忽略
'M' 被修改
'R' 被替换
‘G’ 被合并
‘U’ 已经更新
‘E’ 已经存在
'X' 外部定义创建的版本目录
'?' 文件没有被添加到本地版本控制
'!' 文件丢失或者不完整(不是通过svn命令删除的文件)
'' 受控文件被其他文件阻隔
.svn隐藏文件为本地版本控制库,同级别或者说所在的文件夹为工作空间

四、SVN终端演练(个人开发)

SVN命令格式&&必学命令

格式:svn [options] [args]
格式:svn 子命令 [选项] [参数] 其中中括号里面的内容可以省略
svn [子命令] --help
svn help [子命令] 例如svn help [import]

SVN命令使用流程

1 经理初始化项目上传SVN服务器端

(1.1) 创建项目
(1.2) svn import [path] URL --username=用户名 --password=密码 -m "注释"
例如:svn import [/Users/xiaomage/Desktop/momo] http://192.168.140.128/svn/momo/code/ -m "初始化项目"
结果:momo内的文件放入远端code中
(2.1推荐)svn checkout URL [path] --username=用户名 --password=密码 : 初始化本地仓库
(2.2) 创建项目
(2.3) 使用 svn add 命令将项目所有文件添加到本地版本控制
(2.4) 使用 svn commit 提交本地项目到远程服务器

  1. 程序猿从服务器下载一份完整代码到本地开始开发
  • svn checkout URL [path] --username=用户名 --password=密码
  1. 修改文件
  • 使用svn commit -m "注释" : 提交本地文件到服务器
  1. 新建添加文件
  • 新建文件,使用 svn add 命令将项目所有文件添加到本地版本控制
  • 使用 svn commit -m "注释" : 提交本地项目到远程服务器
  1. 删除文件(不可手动删除)
  • svn remove filename 或者 svn delete filename 从本地版本控制以及对应文件删除
  • svn commit -m "注释" : 提交本地操作到服务器, 使服务器也删除对应的文件
注意点
  • 任何本地的操作, 如果想让服务器也做同样的操作, 就直接通过 commit操作 提交到服务器
  • 任何向服务器提交的操作,都要加注释 添加 -m参数
  • svn status
    查看当前工作空间内, 所有 有变化的文件 的状态
    如果执行此命令什么都没输出, 代表本地没有东西要提交
  • svn log
    查看当前版本的操作日志(什么人, 什么时间, 做了什么操作)

五、SVN终端演练(多人开发)

  • 增删改参考个人开发
  • 另外一端从服务器更新文件svn update
常见问题
  • 超时:版本小于服务器版本,需要先update
  • 冲突:为了解决超时问题,只能更新.而在更新过程中,如果几个人修改了同一文件的同一行代码,此时就会产生冲突
系统提供三种解决方案:
(p) postpone,
延迟处理(待会我自己处理), 如果选择这一种, 会自动生成三个文件供用户参考决策. 并将冲突部分代码块合并到一起. 而一旦解决完毕, 需要执行 svn resolved fileName 来告诉版本控制器已经解决, 然后版本控制器就会自动删除三个参考文件
(mc) mine-conflict
使用我的(本地的), 如果代码产生冲突, 则以本地代码为准
(tc) theirs-conflict
使用他人的(服务器), 如果代码产生冲突, 则以服务器代码为准

此时person.h内代码形式:
<<<<<<< .mine
    此处代表是我的代码
=======
    此处代表服务器代码
>>>>>>> .r7

新增参考文件文件说明:
person.h.mine本地该文件自己已修改的最新代码
person.h.r6本地未修改
person.h.r7服务器代码
使用svn resolved person.h将参考文件删除

六、版本回退

  • 概念: 是指将代码(本地代码或者服务器代码), 回退到之前记录的某一特定版本,原因: 如果代码做错了, 想返回之前某个状态重做;
修改了,但未提交的情况下, 回退代码
  • 方案1: (大力推荐)
    svn revert (作用:返回到上次提交后版本对应的最原始的状态)
  • 方案2: (不推荐)
    删除整个项目,重新checkout
修改了,并且提交了的情况反悔
  • 方案1:
大力推荐
1, svn update
(作用: 将本地代码更新到与服务器相同的版本)
2, svn merge 文件名 -r 版本1:版本2
(作用: 把版本1 -> 版本2 的 diff 作用在当前版本)
3, svn commit -m “本地和服务器都回退到某一指定版本”
(作用: 让服务器代码也退回到之前某个版本状态)
  • 方案2:
1, svn update -r 指定版本号(此时本地代码已经变化,但是服务器没有改变)
--------以下步骤是为了让服务器代码也回滚到以前的版本----------
2, 修改部分文件
3, svn update (此时会产生冲突, 选择使用自己的代码即可)
再次提交代码
  • 方案3:
手动保存需要回退的文件内容
删除文件,提交到服务器
重新添加文件,上传到服务器

七、相关可视化工具使用

  • cornerstone versions xcode

八、SVN目录规范

  • trunk : 主干,当前开发项目的主目录;
    我们之前更新代码,提交代码都是在这个文件夹进行操作
  • brannches:分支目录
    添加非主线功能时使用,开发测试之后,可以合并到主干项目中。修复Bug,研发不确定的新功能都在这里做
  • tags:标记目录,通常作为重大版本的备份;
    如果有发布版本出现Bug,可以快速的找到对应版本的项目备份,然后开一个分支,进行Bug修复,用于与主干区分

你可能感兴趣的:(源代码管理之SVN)