程序员面试闪充--版本管理之SVN

Posted 程序员面试闪充

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面试闪充--版本管理之SVN相关的知识,希望对你有一定的参考价值。

仁圣之本,在乎制度而已,

管理之本,在乎规则而已。

在软件开发过程中,通常一个软件项目要靠多人合作完成的。而在此过程中的修修改改一定会存在一些不可避免的问题。可能一不小心就闹出个大乱子呢。



源代码管理的问题


1)无法后悔:乱删改代码,一旦Xcode奔溃关闭,将无法回退。若是个人开发,所有的代码都将在一台电脑上保存,万一丢失,后果不堪设想。

2)浪费资源:对项目添加新功能,备份。

3)版本混乱:因版本备份过多而造成混乱,难以找回正确的版本

4)代码冲突:多人操作同一个文件

5)权限控制:无法对源代码进行精确的权限控制

6)追究责任:项目出现严重bug,无法精确得知是谁所做

…………

而源代码工具就是为了解决上述问题而产生的



管理工具的作用



1)能追踪一个项目从诞生到定案的过程

2)方便查阅特定版本的修订情况(使用简单,不会增加工作量)

3)检验开发人员是否合格(是一位合格的软件开发人员必须掌握的技术)



常见的源代码管理工具



1)CVS:开启版本控制之门,1990年开发,是“远古时代”的主流源代码管理工具

2)SVN(Subversion):集中式版本控制之王者。是CVS的接班人,速度更快功能更强大,在国内的使用率非常之高(70%-90%)

3)GIT: 是一款分布式源代码管理工具,目前被越来越多的开源项目使用



SVN的搭建



1) 基本操作

 


分为服务器(svn的仓库)和客户端。


  • 客户端通过svn checkout将服务器代码完整下载到本地(只需要做一次)

  • 通过svn commit将本地修改的内容,提交到服务器(每天下班前:commit一次可运行版本)

  • 通过svn update将服务器最新的代码下载到本地(若客户端已经有代码)


2)使用环境

  • 服务器

  用于存储客户端上传的源代码

  Windows:Visual SVN Server

(大部分情况下,公司的开发人员不必亲自搭建SVN服务器)

  

  • 客户端

 用于上传本地代码到服务器,或者更新服务器代码到本地,保持同步。可以在mac上使用命令行、Versions、Cornerstone、Xcode

 

 3)服务器的搭建

下载一个Visual SVN Server安装包

但是要注意这个软件只能在windows系统上搭建

勾选安装控制台和服务器,默认勾选添加一个控制台。

程序员面试闪充--版本管理之SVN


选择标准版本,企业版有更多功能,但是会涉及到收费项目。

程序员面试闪充--版本管理之SVN


确定仓库存放的位置。下面小框最好不要进行勾选,SVN一般在公司内网,所以不会有截取数据的危险,所以不需要选择https,因为安全认证会浪费时间。

程序员面试闪充--版本管理之SVN


更新完成后是否要发emial给用户,安装完成之后是否打开

程序员面试闪充--版本管理之SVN


下面进行安装后的操作

  • 创建仓库

程序员面试闪充--版本管理之SVN


  • 选择是否为空项目


  •  设置访问权限

 

 可以设置用户的访问权限。也可以通过Properties选项来修改权限。

程序员面试闪充--版本管理之SVN


  • 添加用户

第一种方式添加 create user

程序员面试闪充--版本管理之SVN


第二种方式添加

程序员面试闪充--版本管理之SVN


这里还可以设置分组,设置为组的是为了方便管理。在以后的项目中,可以直接使用本小组的成员。


  • 访问

选中项目名选择Copy URL to Clipboard,复制出URL回车就会弹出弹窗。输入用户和密码就能操作SVN的仓库。

接下来可以看见结果,每操作仓库一次,版本号就会加一


程序员面试闪充--版本管理之SVN




操作命令行


1)项目经理初始化项目


  • 项目经理将服务器已有的内容下载到本地


svn checkout 服务器地址 --username=用户名 --password=密码


  •  项目经理初始化项目


不要管.svn 它用来管理下面的东西

创建一个main.m文件


touch mian.m


接着可以给main.m文件添加内容


查看状态


svn status


文件的状态

程序员面试闪充--版本管理之SVN


添加文件


svn add main.m


  • 提交代码到服务器


svn commit -m "初始化项目" main.m :将main.m上传到服务器


在命令行中可以看到,每次操作了服务器,它的版本号就会进行加1


2)它人加入开发

  • 将服务器的所有内容下载到本地


svn checkout 服务器地址 --username=用户名 --password=密码


自此,第二人张三也可以加入到开发中。但是要先进入到工作目录中,否则svn无法对第二人的代码进行管理。

创建一个新的类


cd code

touch person.h persion.m 


之后,经理更新svn就可以看到张三上传的文件了


svn update


3)命令行的简写


svn checkout =  svn co

svn status = svn st

svn commit = svn ci

svn update = svn up


4)版本回退


  • 修改了未提交退回到本版本


svn update -r版本号

比如

svn update -r7


  • 已经提交了想退回到上一个版本

先回退到某个版本,观察是否是自己想要的那个版本


svn update -r6 


更新到最新的版本,这样本地版本号就不会低于服务器号


svn update 


合并版本号,并且指明回退的文件


svn merge -r新版本:要回退的版本 文件名

svn merge -r7:6 persion.h


最后提交代码到服务器上


svn ci -m "回退到版本x"


5)删除文件


当要删除一个文件时,直接移到废纸篓的方式只能是子子孙孙无穷尽。


svn remove 文件名

svn rm person.m

svn ci -m "删除了person.m"



6)查看版本信息


svn update   //更新服务器最新的内容

svn log   //查看版本信息


7)新人加入,版本冲突


李四和张三同时修改了文件,李四先提交上去,而张三修改后再提交会发现,由于本地版本号低于服务器版本号而过期。所以要先更新项目。

程序员面试闪充--版本管理之SVN


而这种更新会产生代码冲突……

程序员面试闪充--版本管理之SVN


解决方法:

  • df(diff-full):在命令行中展示所有的不同

  • e(edit):在命令行中来编辑冲突,r(resolved)命令告诉服务器已经解决了冲突。

  • mc(mine-conflict):用本地的代码来覆盖服务器的代码

  • tc(theirs-conflict):用服务器的代码来覆盖本地代码

  • p(postpone):延时解决冲突,会展示所有冲突的文件,手动解决冲突

mc和tc都无法完美的解决冲突问题,所有选择p。之后会在person类中出现下面三个文件。

程序员面试闪充--版本管理之SVN

打开源文件,手动修改冲突

程序员面试闪充--版本管理之SVN


解决好之后,再命令行输入命令resolved告诉服务器已经解决好冲突


svn  resolved 文件名

svn resolved person.h


如此,就可以删除掉刚刚忽如其来的那几个文件

  • 避免冲突

 尽量在修改文件之前,先执行update命令

 如果修改公共文件,最好先与同事沟通,修改完成后,再让对方更新。


Cornerstone图形化界面工具的使用
 

程序员面试闪充--版本管理之SVN

 点击+号添加一个仓库,接着要输入各类信息。其他的信息都可以选择,而端口号可以通过右键properties属性,在弹窗中选择Network一栏查看。

程序员面试闪充--版本管理之SVN


  之后下载通过checkout将服务器上的代码下载到本地。然后选择最新的版本保证项目在svn的管理范围内。

 

程序员面试闪充--版本管理之SVN


要注意在svn管理之下,用xcode创建项目时,千万不能勾选git repository。

在第一次提交版本之时,不要选择xcode提交,因为这可能会产生某些错误。


提交之后要做忽略操作。用户数据不需要共享,所以将它删除掉。

删除完成之后,选中整个项目,进行提交。之后使用xcode提交代码。

而当我们只改了一个代码,xcode却需要我们提交许多其他的代码,而这些代码是要在cornerstone中忽略的。

程序员面试闪充--版本管理之SVN


忽略之后还要进行update。因为在做了忽略操作时,project.xcworkspace这个文件已经进行了修改。所以要对服务器进行更新。


  • 需要忽略的文件

xcode会默认记录之前停留文件,下次打开依然停留在该文件

xcode会默认记录之前目录的打开情况

断点信息不需要进行共享

而这些信息都会存在xcuserdata文件里


  • 冲突处理

若两个人都修改了同一个文件就会冲突

此时点击产生冲突的问号按钮,可以发现四种选项的调整方法。第一种是保留两者,服务器代码放上面,而本地代码放上面;第二种是保留服务器代码;第三种则是保留本地代码;最后一种是保留两者,但是将本地代码放在服务器代码之上。

程序员面试闪充--版本管理之SVN


 最后再讲修改好的代码进行提交

 

使用svn的注意点
 

 

1) 如果使用到静态库必须使用命令行将静态库添加到svn的管理之下


svn add libRegex.a



2) 如果使用到了storyboard要特别注意


因为多人开发产生了冲突,有可能会报错无法打开storyboard的错误。此时我们可以选择打开方式为Source Code去修正它。

所以这里温馨提示,在项目开发中,如果能使用xib,尽量使用xib。如果说在项目中使用到了storyboard,尽量保证只有一个人操作storyboard。因为多人操作很可能会产生冲突,而解决冲突十分恶心。


目录规范


一般的项目都包含了三个文件夹。


Trunk:主干,当前开发的主目录

Branches:分支目录,添加非注销功能

Tags:标记目录,通常作为重大版本的备份


svn目录使用案例:


在主干中进行开发,项目开发完成之后提交1.0版本,此时要备份到tags中,作为重大版本的备份。再来着手2.0版本的开发。而市场反应1.0版本出现了一个严重的bug,此时则需要将tags文件夹的1.0版本复制到branches中修复bug,等解决之后,提交上线,将它拷贝到tags中作为1.1版本。最后再与主干中的2.0版本合并起来。

程序员面试闪充--版本管理之SVN


面试题


1)为什么要用源代码管理工具?

答:能追踪一个项目从诞生到定案的过程、方便查阅特定版本的修订情况、检验开发人员是否合格。

   

2) 请解释一下svn中几个比较重要的操作:checkout、update、commit

答: Checkout:将服务器上最新的代码仓库下载到本地;Update:从服务器上下载最新的代码;Commit:将工作提交到服务器。


3)最常用的版本控制工具是什么?原理是什么?

答:最常用的版本控制器有git和svn两种。svn是集中式代码管理,核心是服务器。所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突并提交。所有的版本信息都放在服务器上。

而git则不存在主库这样的概念。每一份库都可以独立使用,任何两个库之间的不一致之处都可以合并。


4)在SVN版本库浏览器中,使用()指令可以查看所选文件或目录的日志?

A、show log  B、Rename  C、Blame   D、Save as

答:选A。Rename是重命名,Blame用于追溯源代码,save as则是另存为的意思。


程序员面试闪充--版本管理之SVN
程序员面试闪充--版本管理之SVN



以上是关于程序员面试闪充--版本管理之SVN的主要内容,如果未能解决你的问题,请参考以下文章

版本管理之SVN客户端的下载安装和使用

直播预告:版本管理之Git崛起,如何从SVN向Git迁移

程序员面试闪充--Cocopods详解

IOS开发-关于代码管理工具之SVN

svn--------------svn介绍------------------William

版本管理-SVN本地版本管理