程序员面试闪充--版本管理之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: 是一款分布式源代码管理工具,目前被越来越多的开源项目使用
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一般在公司内网,所以不会有截取数据的危险,所以不需要选择https,因为安全认证会浪费时间。
更新完成后是否要发emial给用户,安装完成之后是否打开
下面进行安装后的操作
创建仓库
选择是否为空项目
设置访问权限
可以设置用户的访问权限。也可以通过Properties选项来修改权限。
添加用户
第一种方式添加 create user
第二种方式添加
这里还可以设置分组,设置为组的是为了方便管理。在以后的项目中,可以直接使用本小组的成员。
访问
选中项目名选择Copy URL to Clipboard,复制出URL回车就会弹出弹窗。输入用户和密码就能操作SVN的仓库。
接下来可以看见结果,每操作仓库一次,版本号就会加一
1)项目经理初始化项目
项目经理将服务器已有的内容下载到本地
项目经理初始化项目
不要管.svn 它用来管理下面的东西
创建一个main.m文件
touch mian.m
接着可以给main.m文件添加内容
查看状态
文件的状态
添加文件
svn add main.m
提交代码到服务器
在命令行中可以看到,每次操作了服务器,它的版本号就会进行加1
2)它人加入开发
将服务器的所有内容下载到本地
自此,第二人张三也可以加入到开发中。但是要先进入到工作目录中,否则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)新人加入,版本冲突
李四和张三同时修改了文件,李四先提交上去,而张三修改后再提交会发现,由于本地版本号低于服务器版本号而过期。所以要先更新项目。
而这种更新会产生代码冲突……
解决方法:
df(diff-full):在命令行中展示所有的不同
e(edit):在命令行中来编辑冲突,r(resolved)命令告诉服务器已经解决了冲突。
mc(mine-conflict):用本地的代码来覆盖服务器的代码
tc(theirs-conflict):用服务器的代码来覆盖本地代码
p(postpone):延时解决冲突,会展示所有冲突的文件,手动解决冲突
mc和tc都无法完美的解决冲突问题,所有选择p。之后会在person类中出现下面三个文件。
打开源文件,手动修改冲突
解决好之后,再命令行输入命令resolved告诉服务器已经解决好冲突
svn resolved 文件名
svn resolved person.h
如此,就可以删除掉刚刚忽如其来的那几个文件
避免冲突
尽量在修改文件之前,先执行update命令
如果修改公共文件,最好先与同事沟通,修改完成后,再让对方更新。
点击+号添加一个仓库,接着要输入各类信息。其他的信息都可以选择,而端口号可以通过右键properties属性,在弹窗中选择Network一栏查看。
之后下载通过checkout将服务器上的代码下载到本地。然后选择最新的版本保证项目在svn的管理范围内。
要注意在svn管理之下,用xcode创建项目时,千万不能勾选git repository。
在第一次提交版本之时,不要选择xcode提交,因为这可能会产生某些错误。
提交之后要做忽略操作。用户数据不需要共享,所以将它删除掉。
删除完成之后,选中整个项目,进行提交。之后使用xcode提交代码。
而当我们只改了一个代码,xcode却需要我们提交许多其他的代码,而这些代码是要在cornerstone中忽略的。
忽略之后还要进行update。因为在做了忽略操作时,project.xcworkspace这个文件已经进行了修改。所以要对服务器进行更新。
需要忽略的文件
xcode会默认记录之前停留文件,下次打开依然停留在该文件
xcode会默认记录之前目录的打开情况
断点信息不需要进行共享
而这些信息都会存在xcuserdata文件里
冲突处理
若两个人都修改了同一个文件就会冲突
此时点击产生冲突的问号按钮,可以发现四种选项的调整方法。第一种是保留两者,服务器代码放上面,而本地代码放上面;第二种是保留服务器代码;第三种则是保留本地代码;最后一种是保留两者,但是将本地代码放在服务器代码之上。
最后再讲修改好的代码进行提交
1) 如果使用到静态库必须使用命令行将静态库添加到svn的管理之下
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版本合并起来。
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的主要内容,如果未能解决你的问题,请参考以下文章