开发过程中离不开源代码的管理,下面让我们先了解一下关于源代码管理的知识.
为什么会出现源代码管理工具?
- 为了解决在软件开发过程中,由源代码引发的各种蛋疼、繁琐的问题
源代码会引发哪些问题?
无法后悔:做错了一个操作后,没有后悔药可以吃
版本备份:费空间、费时间
版本混乱:因版本备份过多造成混乱,难于找回正确的想要的版本
代码冲突:多人操作同一个文件(团队开发中的常见问题)
权限控制:无法对源代码进行精确的权限控制
追究责任:出现了严重的BUG,无法得知是谁干的,容易耍赖
… …源代码管理工具就是为了解决上述问题而生的!此乃软件开发的一大福音!
概括一下,源代码管理工具的作用是
- 能追踪一个项目从诞生一直到定案的过程
- 记录一个项目的所有内容变化
- 方便地查阅特定版本的修订情况
使用源代码管理工具好处
由于使用简单,不会增加工作量
不会对现有工作造成任何损害(坏的影响)
是一位合格的软件开发人员必须掌握的技术
-
注意:
- 如果是团队开发,使用源代码管理工具是强制性的!
- 如果是单人开发,也强烈建议现在就开始使用源代码管理工具
那么下面列举一下常见的源代码管理工具
CVS
- 开启版本控制之门
- 1990年诞生,“远古时代”的主流源代码管理工具
SVN
- 全称是Subversion,集中式版本控制之王者
- 是CVS的接班人,速度比CVS快,功能比CVS多且强大
- 在国内软件企业中使用最为普遍(70%~90%)
GIT
- 一款伟大的分布式源代码管理工具
- 目前被越来越多的开源项目使用
- 不过在国内企业尚未大范围普及
接下来我们介绍这篇文章的重点SVN(说明:一般程序员是没有机会安装SVN服务器的,都是由项目经理或者技术总监安装,所以就不给大家详细写下安装的过程了)
- 同样给大家介绍一些基础知识
概念:
- Repository 代码仓库,保存代码的仓库
- Server 服务器,保存所有版本的代码仓库
- Client 客户端,只保存当前用户的代码仓库
- 用户名&密码 访问代码仓库需要使用自己的"用户名和密码",从而可以区分出不同的人对代码做的修改
最常使用的3个操作:
- checkout 将服务器上最新的代码仓库下载到本地,
只需要做一次
- update 从服务器上将其他人所做的修改下载到本地,
每天上班必须要做的事情
- commit 将工作提交到服务器,
每天下班之前至少做一次
UNIX常用命令(不使用图像化界面时候使用)
cd 改变工作目录
pwd 输出当前工作目录的绝对路径
在UNIX中要执行什么命令,一定要知道自己当前所在的工作目录
ls 查看文件
ls 显示文件
ls -a 显示所有文件
ls -l 列表显示文件
ls -la 列表显示所有文件
touch 用于更改文件访问和修改时间的标准UNIX程序,也被用于创建新文件
touch test.txt
注意:touch不修改test.txt内容,只更改它的访问、修改时间,如果test.txt不存在,它会被创建
cat 连续查看文件内容
more 分页查看文件内容
提示:
- 命令和参数之间需要添加空格
- 如果要使用当前目录中的文件名,输入到一半时,按TAB键能够补全
图形界面工具
在Mac上,也可以利用SVN图形界面工具来管理源代码,可以大大减小使用命令行的痛苦(有些操作使用命令行会比较繁琐,比如解决冲突)
工具: Cornerstone / Versions / Xcode
大部分工作在Xcode中都可以完成
Xcode对SVN的支持并不是非常友好,尤其新建文件夹时,在Xcode中非常容易出问题
注意
- Xcode中,最好不要多人同时修改一个Storyboard!
ok下面让我们一张图搞定SVN
注释:上图中使用了一些缩写如下:
- svn checkout :下载服务器的代码到本地 (简写
svn co
) - svn commit :将改动的文件提交到服务器(简写
svn ci
) - svn update :更新服务器的代码到本地 (简写
svn up
) - svn delete、svn remove :从本地的版本控制库中删除文件(简写
svn del
、svn rm
)
看了上图是不是感觉源代码管理的流程已经很清除了呢,在使用过程中可能会遇到一些问题,下面给大家总结一下常见问题
- 去到公司的第一天,下载公司的代码到电脑上
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 st 显示的文件状态
- ' ' 没有修改
-
A
被添加到本地代码仓库 -
C
冲突 -
D
被删除 -
I
被忽略 -
M
被修改 -
R
被替换 -
X
外部定义创建的版本目录 -
?
文件没有被添加到本地版本库内 -
!
文件丢失或者不完整(不是通过svn命令删除的文件) -
~
受控文件被其他文件阻隔