系统提供撤销的功能对我们实际开发中特别重要。改动后撤销几乎也是我们每个人经常做的事情。再多人进行同一个项目的开发或者测试的时候,版本的唯一性(类似于临界区资源),也就是说A 和B 两个人协同工作的时候不能同时对同一个文件改动,并保存成功。否则就会出现不一致问题。版本控制系统很好的解决了这一问题,并且提供日志文件,记录改动的各种信息,方便撤销操作。版本控制系统就是一套在程序开发过程中存储源代码所有修改的工具。此处主要介绍Subversion的用法。

1、安装Subversion

Ubuntu 在安装源中提供了Subversion 的下载,

sudo apt-get update

sudo apt-get install subversion  ##全部小写

测试安装结果:

svn -–version

svnadmin –version

结果如下表示安装成功:

2、建立项目仓库

项目仓库用来存储各种文件的主要场所,以目录以作为载体。建立仓库svn_test。将项目所有相关的源代码放在这里面。

zhuxy@ubuntu:~$ mkdir /home/zhuxy/svn_test

zhuxy@ubuntu:~$ svnadmin create /home/zhuxy/svn_test

没报错没的话就是创建成功了。此时在svn_test下面已经有部分文件了。Subversion就是通过他们来记录项目发生的过程。

    

3、创建项目并导入源文件

第一步创建两个项目;第二步导入源文件到项目仓库中import。

    

命令解析:import为导入源代码命令。目的是file:///home/zhuxy/svn_test/project。一般会是网络上的一个站点(目录)。本地采用本地目录,“file://”表示协议。subversion支持HTTP、SSH 协议。project为本地的项目名,这并不是实际存在的一个项目,而是一个“逻辑上”的项目。为了防止自己把项目的名字忘记了,可以在本目录下创建一个project项目。但这个project项目中不会自动存储任何内容。”.“表示当前目录,表示将当前目录的所有文件都导入到项目仓库中。

-m选项是为本次操作添加一个操作说明,对于日志文件特别重要,相当于程序中的注释,当出现问题时,可以根据提示信息快速找到原因,即使省略该选项,Subversion 还是会强制要求输入的。

4、开始项目开发

开发人员总是会在自己主机上建立一个目录,然后在这个目录下编写程序。下面这个目录就是在用户主目录下面建立work/project目录,接下来的”开发“就放在此目录下面。

下面从“服务器“上取得源文件的工作拷贝。

由于刚刚把源文件导入到了项目仓库。所以在subversion的逻辑来看,这就是版本”1“

checkoutzhidao subversion从服务器签出源资源。目标是project目录。查看project目录,可以看到源文件已经在里面了。

此时project目录已经和项目“file……/project”已经在subversion层面上建立了关联,以后只要在projec目录上执行的svn update就可以更新本地源代码。

5、后续比较重要的几个命令

客户端修改结束保存时可以查看svn中的源代码有没有在被修改(修改未提交)

svn status multiply.c

会显示M    multiply.c

查看修改的和源文件的不同:

svn diffmultiply.c

修改后提交

svn commit -m “修改宏定义宏的错误”

完成提交后会查看日志文件,会发现multiply.c的版本号变为2

svn log multiply.c

6、解决冲突的命令

如果两个人同时对一个文件改动,就会发生冲突。

第一个人提交可以顺利提交(就是先提交的那个人,因为这样子版本号自然+1),第二个提交的就会报错,因为版本号+1已经被占用。

svn update

svn resolves multiply

7、撤销改动

回滚到版本3的状态

svn merge -r 4:3 multiply.c

svn commit -m “鉴于效率,保留两位数的除法宏定义”

声明:此博文参考刘忆智的书籍Ubuntu从入门到精通,浅显易懂,值得一读。

最新文章

  1. 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
  2. Mina、Netty、Twisted一起学(三):TCP消息固定大小的前缀(Header)
  3. 转: 浅谈C/C++中的指针和数组(二)
  4. Linux安装IDA神器
  5. dedecms后台登录如何去除验证码设置
  6. Linux Shell脚本读写XML文件
  7. 【Spring】关于Boot应用中集成Spring Security你必须了解的那些事
  8. Codeforces Round #326 (Div. 2) C. Duff and Weight Lifting 水题
  9. js 中cookie 使用
  10. win7如何快速设置开机启动项?
  11. 13 于C#如何获得在IP住址
  12. NIO相关基础篇二
  13. vue-lazyload简单使用
  14. WebApi 后台获取token值
  15. Vuejs——(9)组件——props数据传递
  16. 天池新人赛-天池新人实战赛o2o优惠券使用预测(一)
  17. vue模拟后端获取数据——json-server与express
  18. MVC使用jQuery从视图向控制器传递Model的2种方法
  19. Flask中的session和cookie以及日志
  20. JQuery漂浮广告代码

热门文章

  1. PHPstorm配置远程及本地服务器
  2. Fantasy of a Summation n个数,k层重复遍历相加。求它的和%mod的值;推导公式+快速幂
  3. 微信强大的demo
  4. 第一百八十三节,jQuery-UI,知问前端--验证插件
  5. [浪风JQuery开发]jquery最有意思的IFrame类似应用--值得深入研究
  6. Prime pair connection (Project Euler 134)
  7. Android 图片压缩的方法大全
  8. .NET 单点登录解决方案
  9. UVA 10319 - Manhattan(2-SET)
  10. 关于angularjs的select下拉列表存在空白的解决办法