svn 的学习总结

一直以来,对svn的概念都比较模糊的,出了问题也不知道从哪里做手分析。现在把svn重新学习了一遍,对以前的一些模糊或者错误的概念明晰了一下。
1.svn的服务器版本库里的版本号是一个全局的概念的,对整个目录树和所有的文件有效。但是工作拷贝里面(客户端的工作目录)却是一个混合的版本。每个文件有一个基准版本(svn update时的版本号,eclipse里面svn插件的compare里面的基本修正版,也是这个意思)
2.每次commit时,并不会自动update,这也是造成1中工作拷贝混合版本的主要原因。当前版本为1,用户Aupdate,共有文件ab,这时用户B commit a,版本2,A commit b 版本3,这时,A 是1,3的混合,B是2,1的混合。
3.建立版本库
svn create /home/svn_space/版本库名称,每个版本库一个指定的目录。
svnserve -d(以守护进程运行)来发布,默认会发布系统里所有的版本库目录,以绝对路径访问。svn://host/home/svn_space/版本库1
-r 可以发布指定目录下的,而且以该目录为工作目录,一般都会采用该形式。所以如果有多个版本库,放在一个统一的目录下也很重要。(如上面的svn_space)
svn -d -r /home/svn_space/ 访问svn://host/home/svn_space/版本库1,版本库2
import [path] url
import dream3 svn://localhost/dream3/trunk 可以到子目录,这个是常用的。
把内容导入版本库,可以看成批量的svn add,然后commit
checkout url [path] 得到工作拷贝也可以指定url子目录,没有path的默认.
4.基本工作周期
  更新你的工作拷贝
    svn update
  做出修改
    如果是目录树的修改,在修改目录树的同时,要执行下面命令,对文件内容的修改则不必。
    svn add 该命令之前需要先新建文件,命名本身不会新建文件。
    svn delete 同上。
    svn copy 会新建文件
    svn move 等价与copy delete,改命一定要用这个,不然,就出错,很麻烦。
    eclipse在执行目录书更改的时候会执行对应的命令,所以修改尽量在eclipse中完成。
查看修改
            svn status
            svn diff
            svn diff file.txt 比较基准版,和工作拷贝
            svn diff -r n file.txt 比较某版本和工作拷贝 常用 -r HEAD
            svn diff -r n1:n2 file.txt 比较两版本
            该命令对应eclipse中的compare
可能会取消一些修改
            svn revert 非常有用,经常会给某些文件价格了换行,空格之类的就会被要求提交,以前自己也就随手提交了,这样的不好,问题是一可能导致冲突,二是是history变得不清晰,正确的办法是对于自己觉得不该提交的文件,先diff,如果没有什么修改,revert
解决冲突(合并别人的修改)
    解决冲突一定是在本地,需要先update,以前概念不清,svn会先尝试自动合并(二进制文件不会),如果有冲突会产生3个文件。file.Rn1你的base版本,flie.Rn2其他人提交的和你冲突的版本,file.mine你修改的版本,原来的file里面有冲突的标志。删掉这3个冲突文件就可以commit了,也可以用命令svn resovled来删除。
            svn update
            svn resolved
      提交你的修改
            svn commit
4.分支。
可以用处理发布,新特性的开发,bug修正和新功能开发同步等问题。
svn并没有真的分支的概念,分支是通过组合一些命令的使用实现的
首先是目录布局/dream3/trunk /dream3/branches/ 然后就可以建立分支了
svn copy /dream3/trunk /dream3/branches/release1.0
分支间特性的搬运,合并,是通过svn merge来实现的,想想新版本中又出现发布版已经修复的bug,又需要重新修复,这个命令的使用是非常值得的。
这个跟svn diff的使用一样,它只是吧diff出来的内容update到你的工作拷贝。比如release的版本是从n1开始修复bug到n2,trunk可以执行 svn merge n1:n2 svn://host/branched/release1.0/ dream3
注意merge的强大之处,如果n2<n1的话,可以撤销n1到n2的改动,但保留n2,到HEAD的改动。


         

猜你喜欢

转载自zizipo.iteye.com/blog/1050125
今日推荐