一、使用环境
要想利用SVN管理源代码,必须得有2套环境
服务器
用于存储客户端上传的源代码
可以在Windows上安装Visual SVN Server
大部分情况下,公司的开发人员不必亲自搭建SVN服务器
客户端
上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步
可以在Mac上使用命令行、Versions、Cornerstone
开发人员就属于客户端这个角色
Visual SVN Server下载地址
http://www.visualsvn.com/server/download/
二、Visual SVN Server安装
三、SVN 使用
1.创建代码仓库
2.添加用户
3.设置权限
4.访问SVN服务器
三、SVN 客户端命令
svn checkout :下载服务器的代码到本地 (简写svn co)
svn commit :将改动的文件提交到服务器(简写svn ci)
svn update :更新服务器的代码到本地 (简写svn up)
svn add :向本地的版本控制库中添加新文件
svn delete、svn remove :从本地的版本控制库中删除文件(简写svn del、svn rm)
svn move :移动文件或者目录或文件更名
svn mkdir :创建纳入版本控制下的新目录
svn revert :撤销之前的一切修改
svn merge :将两个版本之间的差异合并到当前文件
svn info :查看文件的详细信息
svn diff :查看不同版本的区别
svn log :查看日志信息
svn list :列出版本库下的文件和目录列表
svn status :查看文件状态(简写svn st)
svn help :获取帮助信息(比如svn help ci)
svn lock :加锁
svn unlock :解锁
四、命令使用
1.检出
将项目检出(下载) 至本地
svn checkout URL [PATH]
svn co URL [PATH]
注意:这里的中括号[ ]代表可选(可以省略)
示例
svn checkout https://192.168.1.106/svn/Weibo/ /Users/lnj/Documents/workspace
蓝色代表的是:代码仓库的远程地址
橙色代表的是:将代码下载到本地的哪个路径
如果省略橙色的路径,就下载到命令行当前所在的路径
2.提交
将改动过的文件提交至服务器
svn commit -m "注释" [PATH]
svn ci -m "注释" [PATH]
注意:一定要养成写注释的良好习惯
示例
svn commit -m “修改了User.m文件” /Users/lnj/Desktop/workspace/Weibo/branches/User.m
橙色代表的是:提交哪个文件到服务器
如果省略橙色的路径,就将命令行所在路径中所有改动过的文件提交到服务器
3.添加
提交一个新建的文件到服务器,需要2个步骤
添加新建的文件到本地的版本控制库中:svn add
提交刚才的添加操作到服务器:svn commit
如果直接提交一个没有添加到本地版本控制库中的文件,会报下面的错误
is not a working copy
向本地的版本控制库中添加一个新文件
svn add PATH
示例
vn add /Users/lnj/Desktop/workspace/Weibo/branches/User.m
p橙色代表的是:添加哪个文件到版本控制库中
4.删除
删除服务器上的某个文件,需要做2个步骤
将文件从本地的版本控制库中移除:svn delete 、svn remove
提交刚才的删除操作到服务器:svn commit
将文件从本地的版本控制库中移除
svn delete PATH
示例
svn delete /Users/lnj/Desktop/workspace/Weibo/branches/User.m
橙色代表的是:将哪个文件从版本控制库中移除
5.更新
将服务器的最新代码更新到本地
svn update [PATH]
示例
svn update /Users/lnj/Desktop/workspace/Weibo/branches/User.m
橙色代表的是:更新哪个文件的内容
如果省略橙色的路径,就更新命令行所在路径的所有内容
将文件恢复至某个版本
svn update -r 版本号 [PATH]
6.常见问题总结
去到公司的第一天,下载公司的代码到电脑上
svn checkout
修改了某个早已存在的旧文件,然后提交到服务器
svn commit
提交一个自己新建的文件到服务器
svn add à svn commit
删除一个早已存在的旧文件,然后同步到服务器上
svn delete à svn commit
将其他同事提交的新代码更新到自己电脑上
svn update
不小心写错了很多东西,想撤销所写的东西(还未把修改提交到服务器)
svn revert
不小心删错了文件,想把文件恢复回来(还未把删除提交到服务器)
svn revert
不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器)
svn update -r 版本号
不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)
svn update -r 版本号
注意
.svn这个隐藏目录记录着非常关键的信息
千万不要手工修改或删除这个 .svn隐藏目录和里面的文件! 否则将会导致本地的工作副本被破坏,无法再进行操作
五、图形界面工具
在Mac上,也可以利用SVN图形界面工具来管理源代码,可以大大减小使用命令行的痛苦(有些操作使用命令行会比较繁琐,比如解决冲突)
Cornerstone / Versions / Xcode
大部分工作在Xcode中都可以完成
Xcode对SVN的支持并不是非常友好,尤其新建文件夹时,在Xcode中非常容易出问题
使用Xcode工作:先更新,再提交!
Xcode中,最好不要多人同时修改一个Storyboard!
1.Cornerstone添加管理仓库
2.Xcode5-SVN配置
1>添加SVN地址
Xcode 5 is in Xcode > Preferences > Accounts > Repositories (menu on the left) > (+) Add Repository
2>Xcode5-下载服务器代码
目录规范
正规项目的SVN目录结构一般有3个文件夹
trunk:主干,当前开发项目的主目录
branches:分支目录,添加非主线功能时使用,开发测试之后,可以合并到主干项目中
tags:标记目录,通常作为重大版本的备份
笔记
1 01. 源代码管理工具概述(PPT) 2 ================================================================================ 3 4 * 源代码管理工具的作用: 5 # 能追踪一个项目从诞生一直到定案的过程 6 # 记录一个项目的所有内容变化 7 # 方便地查阅特定版本的修订情况 8 9 * 如果是团队开发,使用源代码管理工具是强制性的! 10 * 如果是单人开发,也强烈建议现在就开始使用源代码管理工具 11 12 * 使用源代码管理工具 13 # 由于使用简单,不会增加工作量 14 # 不会对现有工作造成任何损害(坏的影响) 15 # 是一位合格的软件开发人员必须掌握的技术 16 17 02. SVN介绍(PPT) 18 ================================================================================ 19 20 SVN 是集中式源代码管理工具 21 22 概念: 23 1> Repository 代码仓库,保存代码的仓库 24 2> Server 服务器,保存所有版本的代码仓库 25 3> Client 客户端,只保存当前用户的代码仓库 26 4> 用户名&密码 访问代码仓库需要使用自己的"用户名和密码",从而可以区分出不同的人对代码做的修改 27 28 操作: 29 1> checkout 将服务器上最新的代码仓库下载到本地,"只需要做一次" 30 2> update 从服务器上将其他人所做的修改下载到本地,"每天上班必须要做的事情" 31 3> commit 将工作提交到服务器,"每天下班之前至少做一次" 32 33 03. SVN服务器安装 Visual SVN Server 34 ================================================================================ 35 提示:一般程序员是没有机会安装SVN服务器的,以下内容仅供了解服务器上的安装及配置过程 36 37 * Visual SVN Server 是运行在windows操作系统上的,集成了Subversion和Apache 38 * 傻瓜式安装一步到位,并提供了图形化界面,安装简单配置方便 39 * 下载地址:http://www.visualsvn.com/server/download/ 40 41 1> 安装 42 * 程序目录 43 * 代码仓库目录 44 45 2> 添加代码仓库"weibo" 46 * 暂时不勾选默认结构(trunk, branches, tags) 47 48 3> 添加用户 49 * 为了方便后续的演练,每个用户的口令不要设置成一样 50 # 用户名 口令 51 # manager jingli 52 # zhangsan zhang 53 # lisi li 54 55 4> 添加群组,通过群组可以一次性设置多个用户对代码仓库的访问权限,便于管理 56 57 5> 设置权限演练 58 * 选中项目的代码库,点击右键,选择"Properties" 59 60 6> 协议 61 * https 端口 443 62 * http 端口 80 63 64 7> 协议的修改 65 * 选中"VisualSVN Server",点击鼠标右键,选择"Properties" 66 * 选择"Network",勾选"Use secure connection"会使用https协议访问服务器的代码仓库 67 68 补充:HTTPS = HTTP + SSL 69 注意:有关https的概念暂时不要纠结,有一个印象就可以!后面课程安全部分会讲到! 70 -------------------------------------------------------------------------------- 71 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道, 72 简单讲是HTTP的安全版 73 74 HTTPS提供了身份验证与加密通讯方法,现在被广泛用于互联网上安全敏感的通讯,例如交易支付方面 75 76 HTTPS的证书需要申请认证,这一认证是付费的,认证网站 http://cn.globalsign.com/ 77 78 8> 使用浏览器浏览代码仓库 79 如果使用了https协议,在不同的浏览器中访问,显示效果会不太一样 80 81 04. SVN演练准备 82 ================================================================================ 83 84 1> 显示隐藏文件夹 85 # 显示隐藏文件 86 $ defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder 87 # 不显示隐藏文件 88 $ defaults write com.apple.finder AppleShowAllFiles No && killall Finder 89 90 2> 在桌面上新建一个文件夹 "svn演练" 91 依次建立以下三个目录 92 # 经理 93 # 张三 94 # 李四 95 96 05. 命令行准备 97 ================================================================================ 98 99 熟悉命令行的目的:所有图形工具本质上都是对命令行的封装,理解命令行的操作,更有助于对图形工具的使用 100 101 1> SVN基本命令 102 命令行格式: 103 svn <subcommand> [options] [args] 104 说明 105 svn 子命令 [选项] [参数] 106 107 提示: 108 # [中括号]中包含的内容是可选的 109 # (子命令缩写) 110 111 2> 查看帮助信息 112 113 $ svn help 114 查看svn所有命令的帮助 115 $ svn help 子命令 116 117 3> UNIX常用命令介绍(UNIX常用命令.m)
1 01. 将服务器文件下载到本地 2 ================================================================================ 3 4 # 切换工作目录 5 $ cd 经理的工作目录 6 # checkout服务器上的代码仓库 7 $ svn co http://10.0.1.15/svn/weibo --username manager --password jingli 8 9 提示:checkout(co)之后,本地代码库中会记录用户名和密码,后续操作不用再另行指定 10 11 02. 经理添加文件 12 ================================================================================ 13 14 * svn 常用命令 15 -------------------------------------------------------------------------------- 16 # 查看本地代码库状态 17 $ svn st 18 错误提示:"is not a working copy",必须在svn的工作目录下才能正确使用svn的命令 19 # 查看svn日志 20 $ svn log 21 # 查看某一个文件的日志 22 $ svn log filename 23 # 查看某一个文件某个版本的日志 24 $ svn log filename@1 25 26 * 创建文件 27 -------------------------------------------------------------------------------- 28 # 切换到工作目录 29 $ cd weibo 30 # 创建文件 31 $ touch main.c 32 # 打开并编写文件内容 33 $ open main.c 34 35 * 将文件提交到服务器 36 -------------------------------------------------------------------------------- 37 # 查看工作目录状态 38 $ svn st 39 # 将文件添加到本地版本库中 40 $ svn add main.c 41 # 将文件提交到服务器的版本库中 42 $ svn ci -m "添加了main.c文件" 43 44 "小结" - 添加文件的两个步骤 45 -------------------------------------------------------------------------------- 46 1> 将新建的文件添加到本地代码库 47 $ svn add main.c 48 2> 将刚刚添加的文件提交到服务器 49 $ svn ci -m "备注信息" 50 51 注意:一定要养成写注释的良好习惯 52 53 03. 团队成员加入 54 ================================================================================ 55 56 1> 张三 57 $ svn co http://10.0.1.15/svn/weibo --username=zhangsan --password=zhang 58 2> 李四 59 $ svn co http://10.0.1.15/svn/weibo --username=lisi --password=li 60 61 "小结" 至此,一个项目的搭建工作就告一段落了 62 1> 项目准备工作,通常由项目经理完成 63 2> 程序员只需要把项目 co 到本地即可 64 65 提示:新入职一家公司后,别忘记让经理分配 svn 的账号和密码 66 67 04. 张三添加文件 68 ================================================================================ 69 70 # 添加文件 Person.h Person.m 71 $ touch Person.h Person.m 72 # 修改 Person.h Person.m 73 $ open Person.h 74 $ open Person.m 75 # 将 Person.h Person.m 添加到本地代码库 76 $ svn add Person.* 77 # 将内容提交到服务器 78 $ svn ci -m "添加了Person类" 79 80 05. 删除文件 81 ================================================================================ 82 83 # 删除文件 84 $ svn rm Person.h 85 # 提交删除 86 $ svn ci -m "删除了文件" 87 88 注意:不要使用文件管理器直接删除文件 89 90 06. 撤销修改 91 ================================================================================ 92 $ svn revert Person.m 93 94 07. 恢复到之前的某个版本 95 ================================================================================ 96 $ svn up 97 98 08. 冲突解决 99 (p) postpone 对比 100 (mc) mine-conflict 使用我的 101 (tc) theirs-conflict 使用对方的
1 svn st 显示的文件状态 2 3 第1列状态说明:描述文件被添加、删除或其他修改 4 -------------------------------------------------------------------------------- 5 ' ' 没有修改 6 'A' 被添加到本地代码仓库 7 'C' 冲突 8 'D' 被删除 9 'I' 被忽略 10 'M' 被修改 11 'R' 被替换 12 'X' 外部定义创建的版本目录 13 '?' 文件没有被添加到本地版本库内 14 '!' 文件丢失或者不完整(不是通过svn命令删除的文件) 15 '~' 受控文件被其他文件阻隔
1 01. 安装CornerStone 2 ================================================================================ 3 4 02. 具体操作 5 ================================================================================ 6 1> 添加远程代码仓库 7 2> 到处代码库到本地 8 3> 在本地目录下使用Xcode新建项目 9 注意:不要勾选 git,两套源代码管理同时存在会发生冲突 10 11 4> 升级SVN版本库 12 5> 退出Xcode 13 6> 在CornerStone中忽略个人用户文件"xcuserdata",否则每次都要提交,非常繁琐! 14 提示:xcuserdata目录中为保留用户上次打开的文件,调试设置的断点等信息 15 16 7> 在CornerStone中提交项目 17 18 8> 其他用户操作 19 20 03. SVN演练 21 ================================================================================ 22 23 1> 修改文件 24 2> 修改Storyboard 25 3> 合并冲突(仅在两个人同时修改一行代码时,才会出现冲突)
1 一次检出: 2 》进入经历文件夹 3 》输入svn checkout指令 4 》输入电脑密码 5 》输入用户名 6 》输入密码 7 》检出成功 8 9 第二次检出: 10 》进入小涛文件夹 11 》输入svn checkout指令 12 》检出成功 13 14 只要输入过一次账号密码后, 终端会自动记录我们的密码 15 16 通过指定的账号密码检出 17 svn checkout http://192.168.15.155/svn/weibo/ --username=ls --password=ls 18 19 20 SVN的本质是通过一个文件夹来管理源代码 21 22 默认情况下, 用于管理源代码的文件夹是隐藏的, 这个隐藏文件夹的名称叫做.svn 23 24 25 26 注意: 新建文件或文件夹之后如果直接提交(直接commit)会报如下错误: 27 28 is not under version control 29 30 该错误的含义是: 提示我们提交的文件没有纳入版本控制 31 32 33 34 注意: 在提交代码时必须写上注释(认真写), 否则回报如下错误 35 36 Could not use external editor to fetch log message; 37 38 39 40 注意: svn add只会将文件添加到本地, 不会添加到服务器 41 42 43 44 注意:如果说利用SVN管理源代码, 就不能直接在项目中删除源文件 45 46 47 48 如果修改文件之后, 并且文件没有“提交“(commit) 想反悔,可以使用SVN的 revert指令让文件回到上一次提交时的状态 49 50 51 update除了可以更新服务器最新的代码以外还可以更新到指定版本。 52 53 每次提交代码之后, SVN的版本号都会自动加1. 正式因为版本每次会自动加1, 也就是说版本号是唯一的。 所以我们可以通过版本号更新到指定版本的代码 54 55 56 57 版本控制器中最常见的两个问题: 58 59 1.超时 60 61 SVN 使用SVN有一个原则: 先更新再提交 62 63 只有本地的版本号大于等于服务器的版本号时才能提交, 否则会报一个out of data错误; 64 65 66 ls:R8 67 68 manager :R11 69 70 服务器: R11 71 72 73 74 2.冲突: 75 76 当多个人修改了同一个文件的同一行代码会导致冲突 77 78 我: main.c 11行 123 79 80 其它人: main.c 11行 abc 81 82 其它人先提交了代码 83 84 我再提交代码就会有冲突, 85 86 Conflict discovered in, 提示我们如何解决问题 87 88 (mc) mine-conflict, 代表用我们的代码替换服务器的代码。 89 90 本地的代码只保留我们自己写的 91 92 93 94 (tc) theirs-conflict, 代表用服务器代码替换我们的代码 95 96 本地的代码只保留服务器的, 会自动删除我们的 97 98 99 100 (p) postpone, 自己手动解决。 101 102 本地文件中会同时保留服务器代码和本地代码 103 104 会在本地创建3个备份 105 106 main.c.mine 备课自己最新的代码 107 108 main.c.r17 本地修改之前的版本 109 110 main.c.r18 服务器最新版本 111 112 <<<<<<< 到 ======中间存放的是我们自己修改的代码 113 114 ======= 到 >>>>>>> 中间存放的是服务器最新的代码 115 116 117 118 注意: 手动解决完冲突之后, 需要告诉SVN服务器我们已经解决冲突了, 这样才能保证数据的安全性和SVN的可靠性 119 120 svn resolved 文件名称 121 122 123 ————————— 124 125 注意: 在工具中Repositories中的仓库是服务器的仓库