SVN 备课笔记(2011.4.7-kiki)
*******************************************************************************
好的,我们现在开始,为了照顾新员工,我先介绍一下接下来如何进行我们的培训内容。
首先,我会先带大家过一遍SVN
的常用命令,然后,我们实际演示一下SVN在开发过程中的实际使用周期及中间会遇到什么问题。
*******************************************************************************
首先,我们了解一下什么是Subversion,以及Subversion的历史由来。
SVN 是一个自由/开源的版本控制系统,SVN 让你的文件和目录可以超越时空,允许你的数据恢复到早期版本,可以检查所有的历史。所以我们将SVN理解成一个时间机器。
现在我们知道SVN是一个版本控制系统,(有一些版本控制系统也是SCM系统,可以用来管理源码树,并且具备很多与软件开发有关的特性-比如对编程语言的支持或者提供程序构建工具,)不过SVN不是这样的系统,大家有兴趣可以了解下其他的版本管理工具。
*******************************************************************************
这就是Subversion的产生历史,从2000年开始,2001年完成第一个完整版本,到现在有1.6版了。
*******************************************************************************
从Subversion的架构,我们可以看到:可以有3中方式来访问SVN库。我们现在最多使用的是通过Apache的这种URL的方式来访问。
*******************************************************************************
SVN它有一个与大多数版本控制工具不一样的特点:在SVN中,修订号是针对代码库中所有对象的,包括:目录/子目录/文件。修订号的实际意义是对代码库的第几次提交。
*******************************************************************************
接下来,我们看一下SVN客户端经常使用的一些命令。下面我会给大家演示。
测试库:/home/kikitest
访问路径:http://10.58.100.247/kikitest/
演示服务器:10.58.100.198
1.
svn co s204代码 (1分钟)(1-4518)
2.
svn info ---------查看代码库的属性信息。
3.
svn st--------查看文件的修改信息(M,U,C,?,)?代表这个文件是不受控的。
4.
svn log –r 100 -v --------查看代码库的日志信息,-r,-v,两个参数show出某个版本的时候具体修改了哪些文件。
*******************************************************************************
5.
svn cp MakeFile
makefile1---------
6.
svn st -----------会发现本地的工作拷贝WC中多了一个文件makefile1,前面的/代表这个文件目前是不受控的。
7.
svn ci ---------提交
8.
svn delete------------删除一个文件(是库中的文件,状态不在中间状态如M,C),提交之后库中文件将真正被删除。
9.
svn revert testfile2---------我们试图修改一个文件,会看到状态变成M,在testfile2修改之后,我们考虑将他进行提交,如果发现修改很多是有问题的话,可以使用svn
revert 取消这个文件的所有更改。
10.
svn blame Makefile ----------我们可以查看某个文件的修改历史,可以具体到每行代码的修订号和修改者。
*******************************************************************************
11.
svn cat Makefile –r 400
---------查看某个版本的文件内容。在我们的WC中,一个文件只存在一个修订号,想要看其他任一修订号的某个文件,可以用svn cat 加上版本号即可。
12.
svn diff Makefile –r 2298:3322-----------查看一个文件在两个修订号之间的差异。
*******************************************************************************
13.
svn co s204 –r 4500---------co
s204代码
14.
svn info --------------我们看到是4500版本的代码了
15.
svn up –r 4518---------想更新到4518版本代码,从这里我们看到从4500-》4518,变化过程中修改了一些文件,删除过一些文件,同事新增了一些文件,最终产生了4518版本的代码。
*******************************************************************************
16.
svn export url 目录名-----------从某个其他库的源码导出一个干净的目录树。
17.
svn import 源/目录名 目的地/库名--------导入到库中。
18.
svn mv bcm963xx
trunk/----------搬移目录内容
19.
svn copy url1 url2 –m “………” ---------创建新分支,可以加版本号-r,在linux下的WC目录中就可以执行创建分支了。
*******************************************************************************
20.
处理冲突的方法:
下面我说一个,通用的解决冲突的办法,还不会覆盖代码,以test.php为例 :
1,修改文件后提交不了,大多是因为版本不一致造成的。更新一下,不产生冲突的情况,就可以提交了。
2,更新文件,如果出现冲突的情况,打开冲突文件test.php会看到类似以下的内容
<<<<<<<<<<<<<<<
asdfadfadfadf
11111111111111
=======
asdfadfadfadf
111111111111111
222222222222
>>>>>>>>>>>>>>>>
结合别人修改的内容和自己修改的内容,然后把文件中 的<<<<<,=====,>>>>>>>这类冲突符号去掉。去掉后,还是不 能提交的,为什么?因为冲突时会产生三个文件,有这三个文件存在肯定提交不了。
客户端用的tortoisesvn(这个估计程序员用的最多),冲突时会多产生,三个文件
test.php.mine 是冲突前自己的文件
test.php.版本号 是冲突前本地的版本文件
test.php.服务器的版本号 是冲突后服务器版本文件
提交的时候,把这三个文件删除掉就可以提交了。
3,产生覆盖的原因。
a),在修改冲突文件test.php时,把别人代码都删除掉了,只留下了自己的代码。这样就会产生覆盖了。
b),把test.php.mine中的内容直接copy到test.php文件,这样也会产生代码覆盖。
上面二种情况都是我亲眼看到新手这样操作的,要避免这二种操作方法。
21.
合并
svn merge test.php
–r 200:205 (将版本200与205之间的差异合并到当前文件,通常会产生冲突,需要处理一下。)
End.