源代码管理之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 <subcommand> [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修复,用于与主干区分
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269