SVN使用小结

一、SVN的一些简单的理解

原子提交:类似数据回滚方式,要么成功提交要么被中断回滚,这样我们可以避免只提交一部分文件导致混乱。

联机支持:可用SSH和Apache web服务器让其在公共网络上访问。 通常SVN的部署有这mod_dav_svn  |  svnserve两种,我们常见的网络SVN部署就是采用的第一种,比如新浪的SAE,而一般的局域网(公司内网等)是通过第二种方式部署的。

实现原理:每次新建一个可控制的工程前都要新建一个库,这个库就是保存你所有版本工程的仓库,每次check out时都要从这个仓库中取出你想要的版本工程,默认应该是最新的head版本。

二、SVN创建及简单操作

1.每个项目有一个repository(库存),首先要Create repository。(默认有branches,tags,trunk等文件夹,可通过Repo-brower查看)

2.需要把你的工程import到库(SVN路径)里面。

3.checkout一下,会在指定的(在弹出的窗口自己填写,它会自动记录你之前的操作路径)SVN库路径以及指定的SVN工程路径下生成文件。

4.增加新文件后需要右键 TortoiseSVN—Add,之后再commit一下,这里可以看见你的更改(添加)的文件。

5.update可以更新到提交到库中最新的工程文件。

注意:如果你修改了某个文件,没有commit而是直接update的话,只会更新那些你没有修改的文件,你修改的文件仍然以叹号的形式出现,不会更新。

update与commit都可以点击Showlog—双击修改文件 查看修改(右键版本ComparewithPrevious也可以),如上,可以看到版本改动的地方。
任意选择两个版本右键show Difference as unifiled diff可以直接在同一个文件查看修改的位置。

6.直接右键show-log可以查看所有的版本以及改动,点击不同的版本后再双击文件可以查看不同版本改动的地方。

7.修改文件后,如果发现错了,可以再commit之前直接右键revert来取消修改。

三、TortoiseSVN注意

1.      不要产生冗余

2.      每次使用前先更新再修改

3.      每次提交前要尽量利用标签功能

4.      如果一个版本库包含多个项目,人们通常按分支来安排布局:

/trunk/paint

/trunk/calc

/branches/paint

/branches/calc

/tags/paint

/tags/calc

5.  提交对话框颜色信息

紫色 新项已经增加到你的工作副本中。

深红 你的工作副本中删除了多余项,或是你的工作副本中丢失的项被替换。

绿色 版本库中的修改与你的本地修改成功合并。

亮红 来自版本库的修改在与本地修改合并时出现了冲突,需要你解决。

黑色 你WC中的没有改动的项被来自版本库中新版本所更新。

6.  有时候不小心删除文件,update后发现根文件夹还是红色叹号,这时候右键showlog可以查看哪些修改,之后可以通过revert来撤销操作。

7.  重名问题:如果一方提交的文件盒你还未提交的文件重名,当你update后弹出的提示框显示正常,但是你的重名文件还是你原来的不会被覆盖,此时最好重新命名一下。

8.  冲突解决:我们看到如果不同的人修改了相同的文件后commit会异常,更新也会异常,之后发现文件夹多了几个文件

filename.ext.mine,这是你的文件,在你更新你的工作复本之前存在于你的的工作复本中,也就是说,没有冲突标志。这个文件除了你的最新修改外没有别的东西。

filename.ext.rOLDREV,这是你的文件,在你更新你的工作复本之前存在于你的的工作复本中,也就是说,它是在你做最后修改之前所检出的文件。

filename.ext.rNEWREV,这个文件是当你更新你的工作复本时,你的Subversion客户端从服务器接收到的。这个文件对应与版本库中的最新版本。

右键冲突文件Edit conflict

然后,执行命令TortoiseSVN →已解决并提交人的修改到版本库。需要注意的是已解决命令并不是真正的解决了冲突,它只是删除了filename.ext.mine和filename.ext.r*两个文件,允许你提交修改。

如果你的二进制文件有冲突,Subversion不会试图合并文件。本地文件保持不变(完全是你最后修改时的样子),但你会看到filename.ext.r*文件。如果你要撤消你的修改,保留版本库中的版本,请使用还原(Revert)命令。如果你要保持你的版本覆盖版本库中的版本,使用已解决命令,然后提交你的版本。

你可以右击父文件夹,选择TortoiseSVN → 已解决...,使用“已解决”命令来解决多个文件。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决

之后会看见文件自动添加了一些内容,显示两个冲突的版本

 9.  忽略文件和目录

10. 也许由于服务器问题,一个Subversion指令不能成功地完成,你的工作副本因此被滞留在一个不一致的状态。 那样的话,你需要在该目录上使用TortoiseSVN → 清理命令。

11. 锁定问题:

●文件长期锁定忘记解锁

●不必要的顺序开发

●死锁:例如Sally和Harry都需要修改plugin_mgr.c和plugin_mgr.h,两者互相关联,Sally锁定了.c文件而Harry锁定了头文件,就会进入死锁状态

12. 开发常用两种模式:

锁定-修改-解锁

拷贝-修改-合并

13. 模式对比及使用:拷贝-合并模型假定文件是可以通过上下文合并的。通常情况下,文本文件(例如源代码以及用纯文本,HTML,TeX等格式保存的文档)因为其内部结构直观可知,容易理解上下文,所以用拷贝—合并方案较好。而二进制文件(例如用Microsoft Word格式,PDF等格式保存的文档及图片,声音,可执行文件,库等)内部结构复杂,且不容易理解更改处的上下文,采用锁定-解锁方案较好。

14. 最新的修订版叫做head

这张图就是列一个汉语版的,方便理解一下意思

四、高级操作:分支

为什么需要分支?

1你在开发一个软件,基于Windows平台。有一天你要把这个软件移植到Linux/Unix平台下,同时又不放弃原有版本,怎么管理代码?

2你的产品即将发布,需要进行一段时间的Alpha,Beta测试直至正式版Release。同时,市场的竞争迫使你必须马不停蹄的开发下一个新版本,增加许多新的特性。两个工作必须同时进行,怎么管理代码?

(盗个图示意一下)

利用右键Branch/tags,可以创建分支,这个分支的版本你可以控制,会直接存在你的一个库的文件夹内(并不包含在你的正常工程里面,所以你更新并不影响这个分支)。

右键switch to branch可以从当前的主工程中切换到分支中去,在分支修改不会影响主工程。
 

猜你喜欢

转载自blog.csdn.net/weixin_42175570/article/details/83617870