《SVN版本控制工具介绍报告.docx》由会员分享,可在线阅读,更多相关《SVN版本控制工具介绍报告.docx(15页珍藏版)》请在课桌文档上搜索。
1、老板RedHalSoftware的同意,让他投入这个专案,而且没有时间限制。COlIabNet雇用了Karl和BenCOIlinS-SUSSman,从5月份起先具体设计。由于GregSlein和ColIabNet的BrianBehlendorf和JaSOnRobbinS作了恰当的推动,SUbVerSiOn很快吸引了个活跃的开发人员社区。这说明白很多人有相同的受制于CVS的阅历,他们对最终有机会对它做点什么表示欢迎。最初的设计团队设定r几个简洁的目标。他们并不想在版木限制方法论上有新突破。他们只想修补CVS。他们确定SUbVerSiOn应当与CYS相像,保留相同的开发模型,但不更制CVS最明显的
2、缺点。虽然它不肯定是CVS的完全的替代品,它应当和CVS足够象,从而任何CYS用户可以不费什么力气的转换过来。经过14个月的编码,在2001年8月31号,Subversion可以“自我寄生”TO就是说,SUbVerSion开发人员停止运用CYS管理SUbVerSion的源代码,起先运用SUbVerSiOn代替.虽然COUabNel发起了这个项目,而且仍旧支助一大部分的作(它为一些专职的SUbVerSion开发人员发薪水)。但是SUbVerSion像大部分开放源码的项目一样运作,由一个松散透亮,激励能者多劳的规则管理。COnabNet的版权许可证和DebianFSG完全兼容。换句话说,任何人可以
3、免费下载,修改,按自己的意愿重新分发Subversion,而不必得到来自COuabNet或其他任何人的许可。2009年11月,Subversion被ApacheIneUbator专案所接收。2010年1月,正式成为APaChe软件基金会的个顶级专案。*只能设置书目的访问权限,无法设置单个文件的访问权限。(目前可以通过协助模块比如WandiSCOaccesscontrol实现单文件访问)*数据库为二进制格式,无法便利的利用其它软件读取数据库的内容。1.3SVNClient图形化软件Tot-1.oiseSVN在WindOWS特别受到欢迎的套Client软件,与资源管理器集成得相当不错,可以通过资源
4、管理器在文件或书目上用鼠标右键的菜单完成SVN的操作。TortoiseSVN官方站点Ankhsvn将subversion的操作集成进VisualStudio的SVNClient软件OAnkhsvn官方站点Subclipse将Subversion的操作集成进ECliPSe的SVNClient软件。Subclipse官方站点Subversive和Subclipse相同Subversive官方站点SCPluginMacOS卜.类似TortoiSeSYN的软件SCPlUgin官方站点SVNxMacOSX卜的一款CIient软件SVNX官方站点eSVNUnix卜类似TOrtoiSeSVN的软件eSVN官
5、方站点改自Perforce的SourceDepotoCVSCVS(ConcurrentVersionsSystem)代表协作版本系统或者并发版本系统,是种版本限制系统,便利软件的开发和运用者协同工作。很多开源或者自由软件项目都运用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括:Gnome、KDE、GIMP,Wine等。CVS的运用获GNI通用公共许可证授权。这是个将组文件放在层次书目树中以保持同步的系统。人们可以从CVS服务器上更新他们的本地层次树副木,并将修改的结果或新文件发回:或者删除旧文件。CVS基于客户端/服务器结构(C/S)的行为使得其可容纳妥用户,构
6、成网络也很便利,这特性使得CYS成为位于不同地点的人同时处理数据文件(特殊是程序的源代码)时的首选。GITGit是一个由林纳斯托瓦兹(1.inusBenecIielTOrVaIdS)为了更好地管理IinUX内核开发而创立的分布式版本限制/软件配置管理软件。须要留意的是和GNUInteractiveTools,一个类似NOrIonCominander界面的文件管理器相区分。Git最初的开发动力来自于BilKeePer和Monotone0Git最初只是作为一个可以被其他前端比如Cogito或StGlT包装的后端而开发的。不过,后来Gil内核已经成熟到可以独立地用作版本限制。很多出名的软件都运用Gi
7、t来进行版本限制,其中有1.inux内核、X.Org服务器和O1.PC内核开发。对加入SYN版本限制的单个文件,快捷菜小(图3-6)。图3-6可以对当前的工作版木和SVN库里的版本进行比较,例如1.inUXkernel的.config配置文件(图3-7)。图3-73. 3Ubuntu10.04,svn吩咐安装svnclient吩咐:#apt-getinstallsubversionsvn帮助吩咐:#SVnhelpusage:svnoptionsargsSubversioncommand-1ineclient,version.Typesvnhelpsubcoforhelponaspecifics
8、ubcommand.Typesvn-versiontoseetheprogramversionandRAmodulesorsvn-version-quiettoseejusttheversionnumber.Mostsubcommandstakefileand/ordirectoryarguments,recursingonthedirectories.Ifnoargumentsaresuppliedtosuchacommand,itrecursesonthecurrentdirectory(inclusive)bydefault.AvaiIablesubcommands:addblame(p
9、raise,annotate,ann)catchangelist(cl)checkout(co)cleanupcommit(ci)copy(cp)delete(del,remove,Hn)diff(di)exporthelp(?,h)importinfolist(Is)locklogmergemergeinfomkdirmove(11,rename,ren)propdel(Pde1,p(i)propedit(pediI,pe)propget(pget,pg)proplist(plist,pl)propset(pset,ps)resolveresolvedrevertstatus(stat,st
10、)switch(sw)unlockupdate(up)Subversionisatoolforversioncontrol.4. SVN版本限制过程4.1 1.inuxkernel开发环境因为我习惯在Windowsxp中安装VMware.在VMware中安装1.inUX(这里运用UbUntU10.04),IbUntU中安装ssh,samba,nfs,tftp服务。tftp.nfs用于便利开发调试。samba用于Windows和1.inUX之间的文件共享,在Windows上映射网络驱动器。在Windowsxp上运用Sourceinsight来做1.inUXkernel开发,个人认为这是最好的方法
11、。用Putty,winscp,SecuCRT通过SSh登录到1.inux上编译。所以SVNServer安装在Windows上。Tips:1.inux上支持链接文件,通过Samba共享,Windows不支持链接文件,所以对1.inUXkernel源代码书目树,肯定要用1.inux上的svn吩咐进行版本限制,否则会编译出错(没有深化探讨,我认为是链接文件的缘由)。4. 2SVN版本限制基本流程SVNserverside建立好资料库,配置好资料库书目,用户名,组,各个组或者用户的访问权限。操作过程见2.2节。SVNclientside把源代码或者文档导入到SVNserverWSVnimport.ZE
12、yesight_SoCs:/.159:8443/svn/EyesightSoC,-minit说明:svnimport:svn导入吩咐./Eyesight_SoC:5IJ名称s:/.159:8443/svn/EyesightSoC,:svnServer资料库地址-m“init”:日志内容checkout到本地工作书目#SVncheckouts:/.159:8443/svn/Eyesight_SoC,./说明:svncheckout;svn签出吩咐。s:/.159:8443/svn/Eyesigh1._SoC,:SVnSerVer地址。./:当前书目。查看svn版本限制信息:rootgwenxy-
13、desktopzhomewenxysrcXi1inx/kernel/1in-.3#svninfoPath:.UR1.:s:/RepositoryRoot:s:/.62:8443/svn/wenxyRepositoryUUID:28bcbc35-b5f1-a44b-91de-c8eadf4cf8d3Revision:109NodeKind:directorySchedule:norma11.astChangedAuthor:wenxy1.astChangedRev:1091.astChangedDate:2012-071014:44:53+0800(Tue,10Jul2012)杳看工作版本和资料
14、库的变更:rootwenxy-desktop:/home/wenxy/src/Xi1inx/kernel/1inux.3#svnstIgreplM.config,old.versionM.configMinc1ude/generated/utsrelease.hMinclude/generated/autoconf.hMinclude/generated/compile.hMinclude/config/kernel.releaseMinciude/config/auto.confMinclude/config/tristate.confMModu1e.symversMmake,log?dri
15、vers/sbc1651/Modu1e.symversrootwenxy-desktophomewenxysrcXiIin说明:M表示修改过的文件。?表示新增加的文件,还没有加入版本限制,先用Svnadd吩咐加入相应的文件,然后用svncommit吩咐提交对应的文件。假如要对整个工程书目做提交前,肯定要先SVnUP同步更新下,已防止多人共同修改过同一个文件而冲突。向资料库新增加文件或者书目#SVnaddfile-nameordirectoryItsvncommitfile-nameordirectory-miiyourcomment”假如放弃本地修改的文件,复原到上一个版本firmfiIena
16、me# SVnup或者# SVnrevertfile-name提交修改的文件或者书目# SVncommitfilelfile2directory-mmtitle:modification”警告:提交到资料库中,至少要保证源代码能编译通过!这是最基木的原则,并且要加上简洁明白的注释,例如-m*,I2Cdriver:fixupbug12:kerneloops”。版本比较# SVndifffile-name例如:roolWenXy-desktop:/home/WenXysrcXi1inx/kernel/1inu-.3#svndiff.configIndex:.config# .config(revi
17、sion109)+.config(workingcopy)幽-1,7+1,7弱# /Iutomaticallygeneratedmakeconfig:donIedit# 1.inuxkernelversion:.3-#WedMar712:33:262012+ThuAug210:30:342012CONFlG_ARM=yCONFIG_HAVE_PWM-y-79,6+79,7鲍C0NFIG_UIDI6=yCONFIG_SYSCT1._SYSCA1.1.=yCONFIG_KA1.1.SYMS=y+#CONFIG_KA1.1.SYMS_A1.1.isnotset#CONFIG_KA1.1.SYNS_E
18、XTRA_PASSisnotsetCONFIGJIOTP1.UG=yCONFIG_PRINTK=y说明:语法参考diff工具,这是PalCh包的语法。版本回溯修订版本就是提交版本的一个快照,通过修订版本我们能够返回到原始的版本Subversion客户端可以理解一些修订版本关键字,这些关键字可以用来代替一revision(r)的数字参数,这会被SUbVerSion说明到特定修订版本号:HEAD版本库中最新的(或者是“最年轻的”)版本。BASE工作拷贝中一个条目的修订版本号,假如这个版木在本地修改J,则“BASE版本”就是这个条目在本地未修改的版本。COMMnTED项目最近修改的修订版本,与BAS
19、E相同或更早。PREV个项目最终修改版本之前的那个版本,技术上可以认为是COMMITTEDK因为可以从描述中得到,关键字PREaBASE和CoMMmED只在引用工作拷贝路径时运用,而不能用于版本库IJR1.,而关键字HEAD则可以用于两种路径类型。升SVnupdate-rIIEAD/COMMITTED/PREV/BASEfilename#SVnupdate-rI这里的1代表修订版版本号能够用svnlog进行查看#SVnco-r时间点或时间段)例如:rootwenxy-desktop:/home/wenxy/src/s3c6410/kernel/linu-drivers/char#SVnupda
20、ter22gpio.cUgpio.cUpdatedtorevision22.说明:资料库中的最新版本是24。帮助吩咐是SVnhelpupdate0Validoptions:-r-revisionARG:ARG(somecommandsalsotakeARGl:ARG2range)Arevisionargumentcanbeoneof:NUMBERrevisionnumberDATE,revisionatstartofthedate,HEAD)latestinrepository,BASE,baserevofitemSworkingcopyCOMMITTED,lastcommitatorbefo
21、reBASE,PREV,revisionjustbeforeCOMMITTED查看修改以与消退冲突ttsvndiff发生冲突后,手动修改然后再8svnresolved4.3SVN高领主题标筌(Tag)个标签只是一个项目某时间的“快照”,在Subversion里这个概念无处不在一每一次提交的修订版本都是一个精确的快照。然而人们希望更人性化的标签名称,像release-1.0。他们也希望可以对一个子书目快照,终归,记住released.0是修订版本4822的某一小部分不是件很简洁的事.建立简洁标签$svncopyssvn.examplereposcalctrunks:/svn.examplerep
22、oscalctagsrelease-l.0-m*Taggingthe1.0releaseofthe,calc,project.Coiranitiedrevision351.例如,对IinUX-打个标签(图4-2):图4-2Tips:Tag一股用于测试版本(、Bversion)和发行版本(releaseversion)分支与合并(branchandneger)什么是分支?假设你的工作是维护本公司一个部门的手册文档,天,另一个部门问你要相同的手册,但一些地方会有“区分”,因为他们有不同的须要。这种状况卜你会怎样做?自不待言的方法是:作个版本的拷贝,然后分别维护两个版本,只要任何一个部门告知要做一些
23、小修改,你必需选择在对应的版本进行更改。你或许希望在两个版本同时作修改,举个例子,你在第一个版本发觉r一个拼法错误,很明显这个错误也会出现在其次个版本里。两份文档几乎相同,终归,只有很多特定的微小区分。这是分支的基本概念一正如它的名字,开发的条线独立于另条线,假如回顾历史,可以发觉两条线共享共同的历史,一个分支总是从一个备份起先的,从那里起先,发展自己独有的历史(见图4.3“分支与开发”图4.3.分支与开发Subversion允许你并行的维护文件和书目的分支,它允许你通过拷贝数据建立分支,记住,分支相互联系,它也帮助你从一个分支更制修改到另一个分支。最终,它可以让你的工作拷贝反映到不同的分支上
24、,所以你在口常工作可以“混合和比较”不同的开发线。分支背后的关键概念首先,Subversion并没有内在的分支概念一只有拷贝,当你拷贝一个书目,这个结果书目就是个“分支”,只是因为你给了它这样一个含义而已。你可以换一种角度考虑,或者特殊对待,但是对于Subversion它只是一个般的拷贝,只不过碰巧包含了一些额外的历史信息。其次,因为拷贝机制,SUbVerSiOn的分支是以一位攵件系统书目存在的,这与其他版本限制系统不同,它们都为分支定义了另一维度的“标签”。具体的操作略去,例如,1.inuxkernel的一个分枝是An(IrOidkernelo5.参考资料1 .Subversion中文手册(svnbook),2 .TortoiseSVN中文帮助手册,3,1.inuxhelpcommand,mansvn4.维基百科,