基本信息
文件名称:SVN面试题及答案.docx
文件大小:19 KB
总页数:3 页
更新时间:2025-09-25
总字数:约2.61千字
文档摘要

SVN面试题及答案

一、基础概念题

什么是SVN的工作副本(WorkingCopy)?和版本库(Repository)有什么关系?

答案:工作副本是本地电脑上从版本库拉取的代码文件夹,能直接修改、编辑;版本库是存储所有代码版本、历史记录的中央仓库(本地或远程)。两者通过svncommit(本地改同步到仓库)和svnupdate(仓库改同步到本地)保持同步,工作副本相当于版本库的“本地镜像”。

SVN里trunk、branches、tags三个目录分别用在什么场景?

答案:trunk是主干,存项目日常开发的最新代码,团队主要在这协作;branches是分支,比如开发新功能时建“feature-登录”分支(不影响主干)、修复线上bug建“hotfix-订单报错”分支;tags是标签,用于标记稳定版本(如发布版本“v1.0.0”),不能修改,仅作存档,避免误改发布版代码。

什么是SVN的版本号?它是按文件还是按项目递增的?

答案:版本号是SVN给每次提交(commit)分配的唯一数字(从1开始递增),按项目整体算,不是单个文件。比如改了A、B两个文件后一次提交,版本号从5升到6,此时A和B的最新版本都是6,能通过版本号定位整个项目某一时刻的状态。

二、实操命令题

刚拿到一个新项目,怎么从远程SVN仓库拉取代码到本地?

答案:先在本地建空文件夹,打开命令行进入该文件夹,执行svncheckout远程仓库地址(简称svnco地址),比如svnco/project/trunk,等待拉取完成,本地就有工作副本了。

本地修改代码后,想提交到版本库,需要做哪几步?如果提交前发现本地代码和仓库最新版有冲突,怎么处理?

答案:正常提交步骤:①svnstatus(简称svnst)检查本地修改文件(红感叹号是修改,问号是未纳入版本控制的新文件);②svnadd新文件名(若有新文件需先加入版本控制);③svncommit-m提交说明(说明要写清楚改了什么,比如“修复登录页验证码不显示问题”)。

若提交前冲突:先执行svnupdate(拉取仓库最新代码),此时冲突文件会标红,打开文件会看到.mine(本地修改)、=======(仓库修改)、.rxxx(仓库版本号)的标记,手动编辑保留正确代码,删除冲突标记,再执行svnresolved冲突文件名(标记冲突已解决),最后重新commit。

本地改了代码,但还没提交,突然不想改了,怎么恢复到和仓库最新版本一致?

答案:执行svnrevert文件名(单个文件)或svnrevert-R文件夹名(整个文件夹,-R是递归),注意:revert会直接丢弃本地未提交的修改,无法恢复,执行前最好用svnst确认要恢复的文件。

想查看某文件最近5次的修改记录,包括谁改的、改了什么内容,用什么命令?

答案:执行svnlog-l5文件名(-l5表示显示最近5条记录),能看到版本号、作者、提交时间、提交说明;若想查看具体修改内容,加-v参数(svnlog-l5-v文件名),会显示文件的增删改细节。

三、协作与进阶题

团队里有人误提交了敏感文件(比如数据库密码)到SVN,怎么彻底删除这个文件的所有历史记录?

答案:普通svndelete只能删除当前版本的文件,历史记录还在,需用svnadmindump和svnadminload重写版本库:①先备份原仓库:svnadmindump/原仓库路径backup.dump;②创建新仓库:svnadmincreate/新仓库路径;③过滤敏感文件并导入新仓库:svndumpfilterexclude敏感文件路径backup.dump|svnadminload/新仓库路径;④最后让所有人重新checkout新仓库,注意:操作前要通知团队暂停提交,避免数据丢失。

怎么给SVN仓库配置权限?比如让开发组能读写trunk,测试组只能读trunk?

答案:通过仓库的conf目录下的三个文件配置:①svnserve.conf:开启权限验证(把#password-db=passwd和#authz-db=authz前的#去掉);②passwd:添加用户(格式“用户名=密码”,比如“dev1=123456”“test1=654321”);③authz:配置权限,先分组([groups]dev=dev1,dev2;test=test1),再配路径权限([/trunk]@dev=rw;@test=r,rw是读写,r是只读),配置后重启svn服务生效。

SVN和Git