项目管理-SVN学习

1,概念

1)项目管理

为了使工作项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理。

2)常见的项目管理软件

①SVN (Subversion)

svn

  • SVN 是开发源码软件,无需支付购买费用。同时没有生产厂家为其提供技术的支持。如发现问题,通常只能靠自己查找网上的资料进行解决。
  • 支持Linux、windows、macOS等多平台。svn服务器有2种运行方式:独立服务器和借助apache。易用性高。
  • 它的客户机 / 服务器存取方法使得开发者可以从任何因特网的接入点存取最新的代码;
  • 它的无限制的版本管理检出 (checkout :注 1)的模式避免了通常的因为排它检出模式而引起的人工冲突;
  • 它的客户端工具可以在绝大多数的平台上使用。
  • 同样, SVN 也不提供对变更流程的自动管理功能; SVN 的权限设置单一,无法完成复杂的权限控制。

②Git

Git
- Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- github是一个用git做版本控制的项目托管平台。
- Git 只关心文件数据的整体是否发生变化,而SVN这类版本控制系统则只关心文件内容的具体差异。这类系统(如SVN)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,然而Git 并不保存这些前后变化的差异数据。

③VSS( Visual Source Safe )

  • VSS是微软的产品,可以得到稳定的技术支持。
  • 易用,收费。
  • 提供文件的版本跟踪功能,对于 build 和基线的管理, VSS 的打标签的功能可以提供支持。 VSS 提供 share (共享 ) 、 branch( 分支)和合并( merge) 的功能,对于团队的开发进行支持。 VSS 不提供对流程的管理功能,如对变更的流程进行控制。 VSS 不能提供对异地团队开发的支持。此外 VSS 只能在 windows 平台上运行,不能运行在其他操作系统上。

④ClearCase

  • Rational公司的ClearCase是软件行业公认的功能最强大、价格最昂贵的配置管理软件。
  • 主要应用于复杂产品的并行开发、发布和维护。

3)svn相关名词

①repository(源代码库、配置库)

源代码统一存放的地方。
SVN的核心是配置库,储存所有的数据,配置库按照文件树形式储存数据。任意数量的客户端可以连接到配置库,读写这些文件。
SVN会记录配置库种的每一次更改,不仅针对文件也包括目录本身,包括增加、删除和重新组织文件和目录。

②WorkSpace(工作副本)

是个人的工作空间,我们可以从配置库拿到源代码,放在本地作为工作副本。在工作副本种我们可以进行代码的编写与调试运行。通过SVN可以把新版本的代码提交到配置库中。

2,意义

1)记录

①记录一个项目从开始到结束的整个过程;
②追踪项目中所有内容的变化情况(增删改);

2)版本控制

记录每个版本之间的异同点,如版本2.0相比较版本1.0多了什么内容,功能等。

3)权限控制

防止代码混乱,提高安全性。

4)责任追究

可以清楚的知道谁对哪个文件进行了什么修改,导致了项目无法正常运行。

5)回退处理

执行了错误的操作之后还可以有补救的机会,如从版本1.0升级到版本2.0,后来发现版本2.0有一个错误,这时候可以进行回退处理,比较方便。

6)冲突解决

在团队的多人协同开发中,冲突是经常有的事情,比如存在着相同的文件名称,同一个文件中有着相同功能的函数等等,这时候使用源代码管理工具可以比较方便的解决冲突。冲突的解决一般按照“复制-修改-合并”原则进行。

3,安装与配置

安装svn服务器
svn服务器
安装客户端和汉化包(建议使用英文版,不安装汉化包)
svn客户端
部分软件需要安装SVN插件(如eclipse)

4,使用

1)SVN操作

安装完后,右击本地任何文件夹,都会出现SVN菜单。

①Checkout(提取/检出)

从repository中checkout,即可将SVN服务器中的文件下载到本地WorkSpace中。

check out跟check in对应。
check out导出获得文件后,导出的文件仍处于SVN版本控制中,与版本库保持关联,比如你可以进行Svn Update或者Svn Commit操作。同时导出文件夹下有一个.svn的隐藏文件夹,存储着一些版本的元数据信息。

②Repo-browser

输入svn服务器地址即可进入。

③Export/import

export跟import对应。
export 简单导出一个版本的数据,导出的文件脱离SVN版本控制,修改后无进行Update和Commit操作。导出文件夹下没有.svn目录。

import:将初始的项目(项目目录结构、接口、通用组件、静态页面等)导入版本库

④Create repository here

建立本机的源代码库。
可以在本机别处右键 SVN-Check out, 在弹出框中的URL of respository框中输入(注意,这里是使用file协议)file:///E:\svn\repository\trunk\testProject
svn

⑤Commit(提交)

修改代码后,需要更新SVN服务器中的代码。从WorkSpace中Commit,即可将数据同步到repository中。

注意:

  • 提交时务必填写注释
    建议在创建 svn 路径的时候直接限制为必填,
    否则不允许提交成功。
  • 提交注释填写具体
    所属模块或功能(必须与项目实施进度计划一致)
    性质(正常开发、修改 BUG、扩展功能)
    状态(编码中(x%)、调试通过、独测通过、联测通过 需要说明)
    更新说明(本次提交所涉及修改部分的简要说明)
  • 先更新,再提交

⑥Update (更新)

通过Update可以将WorkSpace中的数据与Repository上的数据进行同步。
注意:
每次写代码之前,应该先更新

⑦Revert(回退)

撤销修改,滚回上次更新的版本

⑧add(添加)

在项目中增加一个新文件,如果该文件没有入库则SVN服务器无法识别,选择该文件单击鼠标右键执行add命令,将文件入库。下图为svn中新增标识,表示文件已经入库,需要进行Commit操作才能提交到服务器。
add

其它svn图标:
svn图标

⑨clean up(清理)

i>场景

本地文件锁定,使用“清除”命令。

SVN本地更新时,由于一些操作中断,如磁盘空间不够、用户取消、两个人同时更新、更新时序冲突,可能会造成本地文件被锁定的情况。这时候无论你在执行SVN的更新、提交等子命令都会提示“**locked”的错误。一般出现这种情况的解决方法:使用SVN clean up来清除锁定。
如果在根目录下都无法clean的话,一般采取的方法是另外找一个目录重新CHECKOUT。但有时SVN目录下可能有一些自己本地修改的文件,还未提交到SVN服务器,
这时重新CHECKOUT需要注意本地文件的备份,并且不要强制覆盖服务器上其它人修改的内容。
其实SVN加锁会在.SVN(隐藏文件)中生成一个名字叫lock的文件(无后缀),查找所有的,手工删除。然后再尝试更新,系统可能会提示某个.base文件无法访问。
找到它,把相关的文件或其所在的目录删除,重新UPDATE。
在相应的目录中,比如我在更新metasploit的“/opt/metasploit3/msf3/lib/active_support/core_ext”这个目录时就遇到了类似的情况,把.SVN子目录(注意,“.”目录是个隐藏目录,需要选择“文件夹选项”→“查看”→“显示隐藏文件”菜单项)里面log文件删除,就可以了。然后继续做svn cleanup命令。

ii>机制

当SVN改变你的工作拷贝(或是.svn中的任何信息),在进行任何修改操作时,SVN都会把日志记录到日志文件中,然后执行log文件中的命令。在执行过程中,会在工作拷贝的相关部分保存一个锁,防止SVN客户端在变更过程中访问工作拷贝。如果SVN的操作中断了(举个例子:进程被杀死了,机器死掉了),日志文件会保存在硬盘上。通过执行日志文件,SVN可以完成上一次没有完成的操作,你的工作拷贝可以回到一致的状态。
这就是svn clean up命令的功能:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果SVN告诉你工作拷贝中的一部分已经“锁定”了,你就需要运行这个命令了。

iii>使用技巧

代码冲突后,clean up后,再次update,在某些情况下会自动合并代码。

⑩setting(设置)

svn设置界面。
可以在saved Data中清除历史数据。(有时候登录过其它账号,再次登录另一个账号会造成权限冲突,处理方法就是clear all)

2)SVN目录结构

Subversion有一个很标准的目录结构,是这样的:
比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是
svn://proj/|+-trunk+-branches+-tags
这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。

①以trunk作为开发主线

我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。
此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。
例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。

②以branches作为开发主线(推荐)

在每一个release的branch中进行各自的开发,trunk只做发布使用。
这种开发模式当中,trunk是不承担具体开发任务的,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。
如果存在bug,则在branch基础上进行修正。

3)SVN服务器目录

svn
目录中文件夹作用:

①conf(配置目录)

conf目录
–authz文件
添加组及其用户accp=user01,user02
为组用户设置目录的读写权限,组前面要用@符,第一个[/]表示目录,[/]@accp=rw
–passwd文件
格式:用户名=密码
user01=1234
user02=1234
–svnserver.conf文件
取消以下几个注释
password-db = passwd
authz-db = authz

这些目录的设置可以通过可视化界面来操作。

②db(版本库)

SVN服务器版本库有两种格式,
一种为FSFS,
一种为BDB
把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中。
如果是FSFS格式,这些数据存放在版本库的db目录中,里面的revs和revprops分别存放着每次提交的差异数据和日志等信息

③hooks(钩子程序)

用于开发部需要svn同步更新服务器代码,需要用到svn钩子(hooks)技术。
未用到hooks时,开发部commit一个文件,线上服务的web文档并不同步,而是需要在svn服务上执行
svn update命令后才能同步。
使用hooks后:
开发部commit一个文件,线上服务(web目录)同步数据,不需要svn update命令了,这样就减少了中间的一个小繁琐,适用于频繁更新代码的情况。

④locks

我们通过Get Lock…命令使SVN文件变成单线程操作,并以此来避免代码冲突。这个锁只有加锁者自己才可以释放。
另外我们也可以添加只读锁,这个锁是任何人都可以释放的。

⑤format

⑥svn.ico

5,版本冲突

1)问题

如果Commit Failed!说明已经冲突了。

此时update后,会多出3个文件:
temp.txt.mine(格式:冲突文件名.扩展名.mine)记录了你的文件名内容
temp.txt.r7(格式:冲突文件名.扩展名.r版本号)记录了当前版本的上一个版本内容
temp.txt.r8(格式:冲突文件名.扩展名.r版本号)记录了当前版本的内容

2)解决办法

①备份自己的代码,执行revert命令放弃所做的修改。再重新编写。
②手动合并冲突文件;
③执行Edit conficts命令解决冲突;

3)冲突避免

①合理分配模块,修改公共模块的时候,同组成员互相沟通。
②每次写代码前,先更新。
③加锁。
执行Get Lock…命令(如下图所示),使用完后记得对已加锁的文件执行Release lock命令。
get lock
为了减少冲突的发生避免一些不必要的麻烦,通常在变更文件之前执对该文件行一次SVN Update操作,但这样冲突还是会发生的,一个比较有效的方法是对文件加锁。
其原理很简单在对文件变更之前先对文件上锁,这是有两种可能若文件有锁(表明有人在编辑)加锁失败,若文件没有锁则加锁成功。一个文件上锁后除了自己别人是不能对文件编辑的,当我们编辑完成之后再解锁,然后别人就可以加锁编辑了。这样就有效的避免了多人同时操作同一个文件时产生冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值