为什么会出现源代码管理工具?
为了解决在软件开发过程中,由源代码引发的各种蛋疼、繁琐的问题
源代码会引发哪些问题?
- 无法后悔:做错了一个操作后,没有后悔药可以吃
- 版本备份:费空间、费时间
- 版本混乱:因版本备份过多造成混乱,难于找回正确的想要的版本
- 代码冲突:多人操作同一个文件(团队开发中的常见问题)
- 权限控制:无法对源代码进行精确的权限控制
- 追究责任:出现了严重的BUG,无法得知是谁干的,容易耍赖
几种源代码管理器的对比
CVS | SVN | GIT |
---|---|---|
1. 开启版本控制之门 2. 1990年诞生,“远古时代”的主流源代码管理工具 |
1. 全称是Subversion,集中式版本控制之王者 2. 是CVS的接班人,速度比CVS快,功能比CVS多且强大 3. 在国内软件企业中使用最为普遍(70%~90%) |
1. 一款伟大的分布式源代码管理工具 2. 目前被越来越多的开源项目使用 3. 不过在国内企业尚未大范围普及 |
基本操作
-
Checkout
只需做一次 - 每天下班前:
commit
“可运行版本” - 每天上班前:
update
前一天所有代码
- 还可以对应的设置用户的
读/写
权限
使用环境
要想利用SVN管理源代码,必须得有2套环境
服务器
用于存储客户端上传的源代码
可以在Windows上安装VisualSVN Server
大部分情况下,公司的开发人员不必亲自搭建SVN服务器
客户端
上传本地的源代码到服务器,或者更新服务器的代码到本地,保持同步
可以在Mac上使用命令行、Versions、Cornerstone、Xcode
开发人员就属于客户端这个角色
VisualSVN Server 安装
Visual SVN Server下载地址 :http://www.visualsvn.com/server/download/
VisualSVN Server 操作
创建代码仓库
添加用户
设置权限
访问SVN服务器
SVN客户端命令
命令 | 简写 | 含义 |
---|---|---|
svn checkout | svn co | 下载服务器的代码到本地 |
svn commit | svnci | 将改动的文件提交到服务器 |
svn update | svn up | 更新服务器的代码到本地 |
svn add | 向本地的版本控制库中添加新文件 | |
svn delete svn remove |
svn del svnrm |
从本地的版本控制库中删除文件 |
svnmove | 移动文件或者目录或文件更名 | |
svnmkdir | 创建纳入版本控制下的新目录 | |
svn revert | 撤销之前的一切修改 | |
svnmerge | 将两个版本之间的差异合并到当前文件 | |
svn info | 查看文件的详细信息 | |
svn diff | 查看不同版本的区别 | |
svn log | 查看日志信息 | |
svn list | 列出版本库下的文件和目录列表 | |
svn status | svnst | 查看文件状态 |
svn help | 获取帮助信息(比如svn help ci) | |
svnlock | 加锁 | |
svnunlock | 解锁 |
检出
将项目检出(下载)至本地
svn co URL [PATH]```
注意:这里的中括号[ ]代表可选(可以省略)
示例
svn checkout https://192.168.1.106/svn/Weibo/ /Users/Documents/workspace
* **蓝色URL**代表的是:代码仓库的远程地址
* **橙色[PATH]**代表的是:将代码下载到本地的哪个路径
* 如果省略橙色的路径,就下载到命令行当前所在的路径
#提交
>将改动过的文件提交至服务器
```svn commit -m "注释" [PATH]
svn ci -m "注释" [PATH]```
注意:一定要养成写注释的良好习惯
示例
svn commit -m “修改了User.m文件” /Users/Desktop/workspace/Weibo/branches/User.m
**橙色[PATH]**代表的是:提交哪个文件到服务器
如果省略**橙色**的路径,就将命令行所在路径中所有改动过的文件提交到服务器
#添加
>提交一个新建的文件到服务器,需要2个步骤
添加新建的文件到本地的版本控制库中:`svn add`
提交刚才的添加操作到服务器:`svn commit`
如果直接提交一个没有添加到本地版本控制库中的文件,会报下面的错误
is not a working copy
>向本地的版本控制库中添加一个新文件 `svn add [PATH]`
示例
svn add /Users/Desktop/workspace/Weibo/branches/User.m
**橙色[PATH]**代表的是:添加哪个文件到版本控制库中
#删除
>删除服务器上的某个文件,需要做2个步骤
将文件从本地的版本控制库中移除:`svn delete 、svn remove`
提交刚才的删除操作到服务器:`svn commit`
将文件从本地的版本控制库中移除: `svn delete PATH`
示例
svn delete /Users/Desktop/workspace/Weibo/branches/User.m
**橙色**代表的是:将哪个文件从版本控制库中移除
# 更新
>将服务器的最新代码更新到本地 `svn update [PATH]`
示例
svn update /Users/lnj/Desktop/workspace/Weibo/branches/User.m
**橙色[PATH]**代表的是:更新哪个文件的内容
如果省略橙色的路径,就更新命令行所在路径的所有内容
>将文件恢复至某个版本 `svn update -r 版本号 [PATH]`
#常见问题总结
|流程|命令|
|---|---|
|第一次使用,下载公司的代码到电脑上|svn checkout|
|修改了某个早已存在的旧文件,然后提交到服务器|svn commit|
|提交一个自己新建的文件到服务器|svn add --> svn commit|
|删除一个早已存在的旧文件,然后同步到服务器上|svn delete --> svn commit|
|将其他同事提交的新代码更新到自己电脑上|svn update|
|不小心写错了很多东西,想撤销所写的东西(还未把修改提交到服务器)|svn revert|
|不小心删错了文件,想把文件恢复回来(还未把删除提交到服务器)|svn revert|
|不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器)|
psvn update -r 版本号|
|不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)|svn update -r 版本号|
# 注意
* `.svn`这个隐藏目录记录着非常关键的信息
* 千万不要手工修改或删除这个 `.svn`隐藏目录和里面的文件!
否则将会导致本地的工作副本被破坏,无法再进行操作
#目录规范
正规项目的SVN目录结构一般有3个文件夹
* trunk:`主干`,当前开发项目的`主目录`
* branches:`分支`目录,添加`非主线功能`时使用,开发测试之后,可以合并到主干项目中
*tags:`标记`目录,通常作为重大版本的`备份`
#使用SVN小建议
1. 经常更新:降低冲突的可能性
2. 提交前需在本机测试通过:降低将问题代码传到版本库
3. 提交时一定写备注(注释):方便其他员工查看和自己以后回顾
4. 对于不需要提交的文件不要提交到版本库
提示
1. 每次修改之前最好先更新
2.每天下班前提交当天运行通过的代码
3.每天上班第一件事情更新前一天的代码