1 SVN使用

软件开发领域遇到的问题

1 开发中的实际问题

1.1 
小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流
——需求之一:备份!

1.2 
这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这被改得面目全非的代码已经回不到从前了。什么地方能买到哆啦A梦的时光机啊?
——需求之二:代码还原!

1.3 
小刚和小强先后从文件服务器上下载了同一个文件:Analysis.java。小刚在Analysis.java文件中的第30行声明了一个方法,叫count(),先保存到了文件服务器上;小强在Analysis.java文件中的第50行声明了一个方法,叫sum(),也随后保存到了文件服务器上,于是,count()方法就只存在于小刚的记忆中了
——需求之三:协同修改!

1.4老许是一位项目经理,我会告诉你他把每一个版本都保存一份吗?我会告诉你这些工程里其实有很多文件都是重复的吗?我会告诉你老许为这事删了很多电影吗?
——需求之四:多版本项目文件管理!

1.5老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来说吧,有个该死的Bug调试了30多个小时才知道是因为相关属性没有在应用初始化时赋值!可是二胖、王东、刘流和正经牛都不承认是自己干的!
——需求之五:追溯问题代码的编写人和编写时间!

1.6小温这两天幸福的如同掉进了蜜罐里,因为他成功的得到了前台MM丽丽的芳心,可他郁闷的是这几天总是收到QA小组的邮件,要求他修正程序中存在的Bug,可他自己本地电脑上是没有这些Bug的,“难道我的代码被哪个孙子给改了?”。是的,小温没来的时候,丽丽是QA小组小郑的女朋友啊!
——需求之六:权限控制!

SVN !!!

SVN概述

项目管理中版本控制的问题

通常软件开发由多人协作开发,如果对代码文件、配置文件、文档等没有进行版本控制,将会出现很多问题:

 代码管理混乱
 备份多个版本,占用磁盘空间大
 解决代码冲突困难
 容易引发BUG
 难于追溯问题代码的修改人和修改时间
 难于恢复至以前正确版本
 无法进行权限控制
 项目版本发布困难

什么是版本控制

 版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生到定案的过程。是一种记录多个文件内容变化,以便将来查阅特定版本修订情况的系统。

主流的版本控制

 VSS:Visual Source Safe(Microsoft Visual Studio成员)主要任务是负责项目文件的管理
 CVS:march-hare出品的一套用于进行文件版本控制软件
 SVN:Apache软件基金会名下的一套用于进行文件版本控制软件
在2000年初,开发人员要写一个CVS的自由软件代替品,它保留CVS的基本思想,但没有它的错误和局限,保留CVS的基本特性但去除CVS的bug和不好的特性。
 在2000年2月,他们联系《使用CVS开发开源项目》(Open Source Development with CVS)(Coriolis, 1999)的作者Karl Fogel,并征求了他是否愿意在这个新的项目中担任一个角色。巧合的是,当时Karl已经和他的朋友Jim Blandy讨论了一个关于新的版本控制系统的设计。在1995年,这两人就成立了Cyclic Software,一个提供CVS的商业支持的软件公司。虽然他们经营商业服务,但是仍然在每天都在工作中使用CVS。使用CVS的挫折感使得Jim认真思考更好的方法来管理数据,不但确定名字为“Subversion”,而且完成了Subversion档案库的基础设计。
 当CollabNet的电话到来时,Karl立即答应了加入项目中,而且Jim让他的雇主RedHat Software同意让他在这个项目中不定期工作。CollabNet雇用了Karl和Ben Collins-Sussman,并在5月开始了详细设计工作。在得到了来自CollabNet的Brian Behlendorf、Jason Robbins和Greg Stein(当时是一名活跃在WebDAV/DeltaV规范过程的自由程序员)很多创意的帮助下,Subversion很快地引起了一个活跃开发者社区的注意。它找出并欢迎很多同样在CVS上受到挫折的社员能来为这个项目做点什么。
 Subversion 最初的设计Team定下了几个简单的目标。 它必须在功能上可取代 CVS,也就是说, 所有 CVS 可做到的事, 它都要能够作到。 在修正最明显的瑕疵的同时, 还要保留相同的开发模式。 还有, Subversion 应该要和 CVS 很相像, 任何 CVS 使用者只要花费少许的力气, 就可以很快地上手。
 经过十四个月的编码后, Subversion 于2001年8月31日开始实现 “自行管理”。 也就是说, 开发人员不再使用 CVS 来管理 Subversion 的代码, 而以 Subversion 自己来管理。
2009年11月,Subversion被Apache Incubator专案所接收。
 2010年1月,正式成为Apache软件基金会的一个顶级专案,所以为Apache Subversion.
目前Apache Subversion的主席为Greg Stein, 项目领导者Re*andisco公司。

什么是SVN

 SVN(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了 SVN。Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件 CVS,在 CVS的功能的基础上有很多的提升同时也能较好的解决 CVS 系统的一些不足。


1 SVN使用_第1张图片
SVN的作用

 针对软件研发企业的软件生产过程而言,SVN用于管理整个开发过程中的源码,进行版本控制。

SVN的使用

C/S
Client
Server

B/S
Browser
Server

C/S是基于客户模式
B/S是基于浏览器模式

凡是有应用的都是C/S,在浏览器界面操作的才是B/S

svn是基于客户/服务器模式:

1 SVN使用_第2张图片

 复制-修改-合并方案(Subversion默认的模式)
在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
 锁定-修改-解锁方案
在这样的模型里,在一个时间段里配置库的一个文件只允许被一个人修改。 此模式不适合软件开发这种工作。

SVN安装

先装服务器端


1 SVN使用_第3张图片

1 SVN使用_第4张图片

1 SVN使用_第5张图片

1 SVN使用_第6张图片

带空格的目录也要少用,如c盘的program files


1 SVN使用_第7张图片

端口号被占用
1 SVN使用_第8张图片

可以停止端口占用,但是使用虚拟机linux环境就不可以了
1 SVN使用_第9张图片

修改端口号
1 SVN使用_第10张图片

安装install


1 SVN使用_第11张图片

点击finish后需要重启再次加载注册表

此时我们可以去安装客户端,然后一起重启
稍等,看一下VisualSVN Server Manager


1 SVN使用_第12张图片

1 SVN使用_第13张图片

新建仓库


1 SVN使用_第14张图片

文件系统和数据库系统两个选项,我们选择第一个


1 SVN使用_第15张图片

1 SVN使用_第16张图片

选择仓管结构


1 SVN使用_第17张图片

设置授予权限
1 SVN使用_第18张图片

创建,复制地址
https://LAPTOP-M0D335QP:8443/svn/svnrepository
1 SVN使用_第19张图片

新建user


1 SVN使用_第20张图片

1 SVN使用_第21张图片

再来一个


1 SVN使用_第22张图片

再来一个
1 SVN使用_第23张图片

1 SVN使用_第24张图片

创建组
1 SVN使用_第25张图片
1 SVN使用_第26张图片

1 SVN使用_第27张图片

授权


1 SVN使用_第28张图片

1 SVN使用_第29张图片

给测试组只读权限


1 SVN使用_第30张图片

开发组读写
1 SVN使用_第31张图片
安装客户端
1 SVN使用_第32张图片

小乌龟~


1 SVN使用_第33张图片

1 SVN使用_第34张图片

1 SVN使用_第35张图片

完成,重启计算机


1 SVN使用_第36张图片

打开TortoiseSVN Repository Browser


1 SVN使用_第37张图片

输入上面复制的路径


1 SVN使用_第38张图片

1 SVN使用_第39张图片

1 SVN使用_第40张图片

1 SVN使用_第41张图片

新建



1 SVN使用_第42张图片

因为只有只读权限,所以不可以创建


1 SVN使用_第43张图片

点击ok结束
1 SVN使用_第44张图片

点击settings
1 SVN使用_第45张图片

清除认证数据


1 SVN使用_第46张图片

重新输入账号密码

1 SVN使用_第47张图片

新建test成功
1 SVN使用_第48张图片

拽进来一张图片
1 SVN使用_第49张图片

1 SVN使用_第50张图片

1 SVN使用_第51张图片

此时图和版本解析都过来了
1 SVN使用_第52张图片

checkout用于从服务器首次下载代码
commit用于提交本地代码
update用于把本地代码和服务器同步,用服务器代码更新本地

修改图片



图标左下角应该出现个红色叹号,但是我这个没显示。。。。


1 SVN使用_第53张图片

update,commit操作都有

点击commit,test文件夹中Revision由2变3


1 SVN使用_第54张图片

客户端主要为了操作文档,而不是代码。

装eclipse SVN插件

直接拷贝


1 SVN使用_第55张图片

验证


1 SVN使用_第56张图片

有了成功


1 SVN使用_第57张图片

显示SVN资源库视图


1 SVN使用_第58张图片

新建资源库位置


1 SVN使用_第59张图片

把之前复制的地址放进去
1 SVN使用_第60张图片

1 SVN使用_第61张图片

上传项目


1 SVN使用_第62张图片

1 SVN使用_第63张图片

1 SVN使用_第64张图片

1 SVN使用_第65张图片

注释可以不要,没多大用
1 SVN使用_第66张图片

1 SVN使用_第67张图片

视图切换
1 SVN使用_第68张图片

打开SVN资源库


1 SVN使用_第69张图片

此时在项目,文件夹,文件上右键commit都可以提交
1 SVN使用_第70张图片

添加注释
1 SVN使用_第71张图片

刷新一下
1 SVN使用_第72张图片

1 SVN使用_第73张图片

此时原视图下图标有了小变化

此时表示代码与服务器相同,当我们修改、保存后
1 SVN使用_第74张图片

导出checkout
1 SVN使用_第75张图片

默认
1 SVN使用_第76张图片

使用缺省空间
1 SVN使用_第77张图片

如果报了叹号,说明jdk、tomcat等有问题

提交修改代码


1 SVN使用_第78张图片

添加注释


1 SVN使用_第79张图片

提交修改变成了6
1 SVN使用_第80张图片

点击team的更新可以更新最新的代码

  1. 当两个人改了同一个文件的不同位置
    后写的人会因为版本不是最新而阻止提交,但是这个时候更新自己写的代码不会丢失,

  2. 当两个人改了不同文件,不会发生冲突

  3. 当两个人改了同一个文件的相同位置
    后提交的人更新后会出现三个版本的内容,之前版本,自己版本,最新版本。

显示资源历史记录,以及和服务器断开连接

1 SVN使用_第81张图片

1 SVN使用_第82张图片

断开连接


1 SVN使用_第83张图片

将项目中的.svn也会删掉,选下面的会把磁盘文件也删掉


1 SVN使用_第84张图片

1 SVN使用_第85张图片

注意熟悉CRM项目的注解配置

  1. 新建db包放入crm.sql和联系人数据文件
  2. 新建com.itheima.domain创建实体类Customer.java实现序列化接口(成员变量private,get,set方法,toString方法)
  3. 除了spring整合struts包、struts-annotation包、struts基本jar包都可以考进去,因为可能会出错
  4. Customer.java添加注解
    @Entity
    @Table(name="cst_customer")
    @Id
    @Column(name="cust_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
  5. 创建业务层接口ICustomerService.java
  6. 客户的业务层实现类CustomerServiceImpl.java
  7. ICustomerDao.java
  8. CustomerDaoImpl.java
  9. 在config包下新建applicationContext包(配置要扫描的包;
    在Serviceimpl里添加注解@Service("customerService"),@Resource(name="customerDao"),在CustomerDaoImpl中添加注释@Repository("customerDao"),@Resurce(name="hibernateTemplate");
    配置hibernateTemplate;
    配置sessionFactory;
    配置数据源)
  10. 新建test包新建测试文件
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:config/applicationContext.xml"})
    @AutoWired
    @Test
  11. 配置事务管理器
  12. 开启spring对注解事务的支持
  13. 在业务层需要使用事务的地方使用@Transactional注解
    CustomerServiceImpl中@Transactional(readOnly=true,propagation=Propagation.SUPPORTS)
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
  14. 放入各种界面
    导入struts基本jar包
    struts的注解jar包
    spring整合jar包
  15. web.xml中配置struts2的核心过滤器
    配置spring的监听器,保证一个应用只有一个容器
    手动指定spring配置文件的位置
  16. 添加动作类CustomerAction
    @Controller("customerAction")
    @Scope("prototype")
    @ParentPackage("struts-default")
    @Namespace("/customer")
    @Results({
    @Result(name="addUI",type="dispather",location="/jsp/customer/add.jsp")
    })
    @Action("addUICustomer")

你可能感兴趣的:(1 SVN使用)