SVN版本控制说明教程.docx
《SVN版本控制说明教程.docx》由会员分享,可在线阅读,更多相关《SVN版本控制说明教程.docx(14页珍藏版)》请在冰豆网上搜索。
SVN版本控制说明教程
SVN版本控制说明教程
来源:
连邦IT服务平台
编辑:
黄燕飞
发布时间:
12-01-16
一、版本库目录结构
SVN版本库创建三个目录,如:
trunk、branches和tags。
trunk为主干版本,主干版本要随时可以将应用部署上线发布出去,而不能在主干版本上做任何代码的修改。
branches是分支目录,存放并行开发的项目代码,可建立多个分支版本,在不同的分支上作不同的模块的编码。
tags目录存放trunk某特定版本的快照,当trunk有新版本的合并时,都应该在tags目录下建立一个trunk当前版本的备份(特别是在大改前和大改后的版本必须做好备份并加以备注说明)。
具体目录结构如下图:
SVN版本库目录结构
二、导入本地项目到版本库中
如果版本库中已保存了相关项目文件,则直接把相关项目检出到本地即可。
若版本库中没有相关项目,则按以下操作:
在版本库中trunk文件夹右击点“检出(Checkout)”,
检出操作
在弹出窗口选定本地路径点“确定”把trunk文件夹检出到指定本地目录,
检出弹出窗口
把本地项目拷贝到当前目录的trunk文件夹中,然后右击trunk文件夹点“SVN提交(SVNCommit)”即可把本地项目导入到版本库中。
三、建立分支或标记
先把版本库trunk中的项目checkout到本地,再右击本地的trunk文件夹到TortoiseSVN->分支/标记(branch/tag),
建立分支/标记
在弹出窗口中选择版本库中相关目录,如branches中的mybranch1.0目录,把最新版本项目拷贝到mybranch1.0目录下,点“确定”即可完成分支的创建。
建立分支
我们可以根据自己的需要创建多个分支,建议可以先创建两个基本的分支,比如mybranch1.0和mybranch2.0。
mybranch1.0用来做项目日常维护,如修改bug,小功能优化等工作。
mybranch2.0用来做相关数据库结构变化对应的代码修改的工作,数据库结构一旦发生变化理论上是不能还原回来的(一旦还原,将会丢失最新的数据),因此针对数据库结构变化所作的代码修改也不可能进行还原,因此这些代码应该单独建立一个分支来进行编码,而不能放在与功能相关的分支中进行编码。
若当有其他大改,如大模块的增加或修改,这时就要针对各模块另外再创建相应多的分支进行并行开发。
另外还有一种方式,应当尽量避免一个分支合并多次,分支的作用一般为了解决bug,一旦bug对应结束了,分支的使命就结束了,以后再出现其他的问题,应当重新建立分支,这样就不会出现多次合并的问题了。
标记(tag)从本质上来说也是一个分支,创建tag跟创建分支是一样的操作过程。
Tag中存放了trunk中每个版本的快照,且不对其进行修改。
四、分支的修改与合并
项目代码的修改,只允许对分支版本进行修改,而不允许在trunk或tags中进行修改。
在一个分支中修改该分支的文件、commit或update文件均不会对其他分支版本造成任何影响,因此你只需要关心当前分支的版本变化就行。
分支每commit一次,版本库就会创建一个新的分支版本。
当分支commit后,我们需要把当前分支的版本合并到主干版本中,或把主干中最新版本合并到当前版本。
以分支合并到主干为例,在本地trunk文件夹右击TortoiseSVN->合并(Merge),
合并分支
在弹出窗口中可以见到有3种合并类型,分别为“合并一个范围的版本”、“复兴合并”和“合并两个不同的树”。
三种合并类型
合并一个范围的版本:
将分支的特定版本范围的修改合并到主干上。
合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。
如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。
如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。
合并一个范围的版本
复兴合并:
复兴合并可以理解为是第一种合并类型的一种特例,在复兴合并中,主干可以理解为是自从开创分支之后没有任何修改,而分支是经过修改的,而且合并中分支是没有版本选择的。
经过复兴合并,分支中所有的修改都会合并到主干中,合并的结果将使得分支和主干一模一样,从而可以删除分支。
复兴合并
合并两个不同的树:
此类型与前两种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;第二种类型是主干和分支都不能选择合并的版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并,比如可以合并范围从主干的上次合并的版本开始到分支上最新的版本结束,如果是第一次合并,则从主干创建分支的版本开始,所以每次合并要做好说明,在日志中体现,不然忘记了下次再合并就有点麻烦。
起始URL即选择主干目录的URL(应当和当前工作副本的URL一致)。
结束URL为选择要合并的分支的URL。
起始和结束的版本是指,一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。
合并两个不同的树
选中其中一种方式点“下一条(next)”,填写相关url及要合并的版本号,再点“下一条(next)”,这时可以点“测试合并(testmerge)”测试看是否报错或有冲突,确定后点“合并(merge)”按钮进行合并。
测试合并
如果合并是发生冲突,会弹出提示框,可以点“编辑冲突”按钮度相关文件进行手动调整解决冲突,并按“解决”按钮完成本次冲突的编辑。
当所有冲突解决后,点“确定”完成合并。
合并冲突
如果合并后的版本效果不满意,并且当前版本还没commit到版本库上,则可以通过TortoiseSVN->SVN还原(Revert),还原回当前合并前的版本。
五、版本还原
之前提到,通过TortoiseSVN->SVN还原(Revert)可以还原所有未提交的修改或合并。
但是如果修改或合并的内容已经commit了,可以通过以下方法进行还原:
右击相关分支(或主干)到TortoiseSVN->现实日志(Showlog),在弹出窗口中可以看到该分支(或主干)的所有历史版本。
右击相关版本点“复原到此版本”,即可把当前版本还原到指定版本,但所有版本记录并不会因此丢失。
可以右击到TortoiseSVN->SVN还原(Revert)来恢复成原来版本。
若已commit,可以通过以上方法还原到commit后的前一个版本来完成恢复。
右击相关版本点“复原此版本做出的修改”,可以把特定某个版本的变化复原回来。
比如如果你曾经修改或合并了一个新的功能并commit到主干版本库上,后来你发现该功能有比较大的问题影响了系统正常运行且不能短时间内对其进行修复,这时可以点“复原此版本做出的修改”把该功能相应的版本暂时撤销下来,让系统先正常运行,再对该功能进行修复。
版本还原
但经本人实验“复原此版本做出的修改”时似乎有些问题,复原时很容易会有冲突,如果复原大改的功能冲突可能会更多,处理冲突时如果弄不好可能会出现一系列问题,也很容易造成混乱。
以下方法将会较好的解决冲突问题,减少混乱,
前面提到,trunk每次有新版本提交时都应该给新的版本创建一个快照,并存放在Tags目录下标记。
比如现在trunk做了4次提交,版本号分别为v100、v101、v102、v103(同时Tags中有4个快照),现在我想把v101所修改的内容撤销,那么我们只需拿出v101的前一个版本(即v100)的快照,将trunk版本与当前快照进行合并,合并时只需合并v101后面的所有版本(即v102、v103),这样就相当于撤销了v101所修改的内容,而且其他的修改均仍然存在。
版本的恢复一般只是一种临时的维护措施,我们可以把临时的版本发布出去,但不需要把临时版本提交到版本库,以便造成混淆。
六、切换工作副本
当创建了一个主干树并检出到本地副本时,你当前操作的副本就是主干副本的内容,任何操作会影响到主干的信息。
当你给主干创建一个新分支时,可在弹出窗口中选中“切换工作副本至新分支/标记”,这时分支创建后,你当前的工作环境也会切换到新的分支中,这是你修改当前分支的内容影响的是当前分支,而不会对主干有任何影响。
切换副本选项
如果在创建分支时没有选中“切换工作副本至新分支/标记”,那么分支创建后你做在的工作副本仍然是原来的副本。
如果你现在想切换到新的分支副本中,右击当前副本到TortoiseSVN->切换(Switch),
切换工作副本
本当中进行切换。
在弹出窗口中选择你要切换的分支的URL再点“确定”即可完成切换。
在多个分支并行开发的情况下,切换操作可以让你方便的在不同副本。
切换的副本的URL