SVN使用补遗-使用中应注意的问题

1.svn 隐藏文件夹保存着SVN当前同步文件夹的一些元信息,不要修改,也不要删除 。 不过有时候被锁定的时候,可以删除这个文件夹中的lock文件以解锁,但是这样做有可能会造成同步错误。
2.添加文件的时候,需要在要添加的文件上点右键然后Add…,然后要想与服务器同步,还需要Commit提交。
3.提交失败的时候,可以试着先更新一下,或者清理一下,然后再提交。
4.平时开发过各中,可以一个人(小组)创建一个开发分支,这样每个人的文件同步不会跟其它人产生冲突。必要的时候可以进行分支合并。
5.如果删除了.svn文件夹,造成一个子文件夹不能同步 ,可以再把这个文件夹checkout一下,这样便可以重新恢复同步信息,自动建立.svn文件夹.
6.Update是与服务器最新版本保持同步,如果本地版本比服务器版本旧,则更新本地文件为服务器版本,如果本地版本比服务器版本更新,则不进行操作。
7.Commit是提交本地的修改文件,本地文件修改后,或者通过Add添加了新文件,或者通过Delete删除了文件,或者移动、复制了文件,都需要通过Commit提交来提交到服务器上。
8.Revert如果要恢复到服务器上的最新版本(某个版本),使用Revert
9.Update to version 是与服务器上的某个文件比较,如果服务器上的文件更新,则同步,否则不做操作。
10.Get lock…和Release lock,是用来锁定某些文件以阻止其它人改变的
11.Patch,批处理,查文档,它的大概意思是多人开发一个项目,可能有的人并没有commit权限,于是它便可以生成Patch然后由有commit权限的用户通过审核后,再Apply patch,应用修改。
12.Relocate 与Switch,前者是在改变URL/IP的时候使用,后者意思是改变目录,比如切换到某个branch
13.Resolve是用来解决冲突的。
14.如果已经有人lock了一个文件,但另外一个人需要编辑此文件,有两个选择,一个是由管理员来解除锁定,另外一个是在get lock选项中有个steal the locks,选择后,即可以编辑该文件
15.SVN的版本概念是针对目录而非文件,即使只更新了一个文件,那么,整体的版本也需要加1
16.推荐使用目录树为
/repos/trunk     用来保存主线,所有的code都存放在这个目录中
/repos/branches  用来保存目录分支,OEM、新功能、设计方案调整,都有可能需要创建分支目录
/repos/tags      用来保存标签拷贝,文档宝的阶段性成果可以打个标签存放到此目录下
17.SVN的上传和更新是异步的,可以分开操作,而不用担心在update的同时把自己不成熟的代码commit从而影响别人的工作。
SVN常用操作
a、保持客户端和服务器端的一致,从服务器上更新文件,update
b、对客户端文件的增、删、改、剪切,add,delete,copy,move
c、状态比较 status,diff
d、取消对服务器上文件的修改,revert
e、合并别人的修改(后更新的人需要做这个操作)update,resolved
f、客户端修改的文件更新到服务器上,commit
18.查询版本,不单单可以通过版本号查询,也可以通过关键字和版本的日期来查询   注意:如果给定时间的话,查询时需要在希望的日期上加一,如要查询2008-09-02的版本,应该使用2008-09-03,因为你只给了日期而没有给指定的时间点。
19.锁定-修改-解锁方案,拷贝-修改-合并方案使用的一般原则
   如果是图像文件,一般使用锁定-修改-解锁方案,因为两个不同的版本没法合并
   如果是文本文件,一般使用拷贝-修改-合并方案
20.锁定文件可以所单个,也可以锁多个,可以选择一个文件夹,然后在列表中勾选。并且,这个锁定是随时都可以解除的,选择unlock即可。
   注意:   如果一旦提交了更新,那么所有的文件都将解锁,即使有部分文件可能还没有更新。 但是如果你在commit的时候,选择keep locks,则文件还是被锁定。
21.对客户端的目录或文件可以设置属性,可以从下拉列表中选择
    如svn:needs-lock,就是对指定的对象设置只读权限,只有当该对象拥有锁定的权限后,才能对文件进行编辑,这样可以确定只有一个用户在操作该文件,避免像图像这样的文件只能线形操作而导致另外一个人工作的浪费。
22.即使客户端的文件test.doc被重命名了hello.rtf(使用svn重命名),但它的历史纪录仍然含有重命名以前的信息,并且可以将之前的版本给提取出来。即使再新建一个test.doc也不会有混淆。(查看历史纪录的时候需要把Stop on copy/rename这个选项的复选框的勾去掉)
23.SVN的复制比较特殊,如果复制一个目录,它其实并没有完全复制目录中的所有的文件,它只是建立一个目录树的入口,你可以把它理解为一个快捷方式,即使当你的新目录中的文件有了更改,它也只是更新你修改的文件,其他文件还是原文件夹的映射,没有更改。
24.对主干和分支上文件的修改互不影响。当完成了分支上所有工作,所有的分支修改可以被拷贝回到主干。
25.对同名文件的合并可以先用svn diff查看文件的区别,然后通过svn merge功能来合并文件。
26.如果需要解决版本的冲突,会在本地目录下产生同名的三个文件,初始的版本(在比较的左边)、最终的版本(在比较的右边)、接收区别的工作拷贝(合并的目标)。通过比较来手动合并版本,如果通过比较不需要将本地的修改合并到服务器上去,则使用revert回滚。
27.手工跟踪合并:SVN并不能完全自动合并冲突,比较合适的方法是在版本提交的日志信息中说明合并的特定版本号(或是版本号的范围),这样等到合并时可以运行svn log来查看分支包含了哪些修改。这样可以帮助依序进行合并而不会进行多余的合并。
28.预览合并:当工作拷贝已经改变,合并会针对存在的那一个文件,这时运行revert不会恢复在本地的修改,两部分的修改无法识别出来。解决这个问题的简单的方法就是使用diff来预览变化部分,通过显示合并时的状态信息,得到合并之后的“整体”预览。
29.svn diff和svn merge的区别:
30.将test.doc版本100重命名为ceshi.doc,同时新建一个文件test.doc为版本102。
    这样区别就出来了:
    svn diff命令忽略祖先,diff命令只是单纯地比较两条路经下的两个文件。
    svn merge是比较两个对象,会注意到版本100和版本102的test.doc两个文件是不关联的。
31.SVN并没有真正意义上的重命名,move命令只是copy、delete两个命令的组合。
32.找回删除的项目:即使删除了文件或目录,SVN的信息从不丢失,只是从当前的HEAD版本消失了,但仍然存在于历史的早期版本。只要通过SVN的log来查看所有改变的每个项目的版本,找出你删除文件或目录的那个版本。
33.将所有的开发代码存放在trunk上。
    常用分支模式:
    a、发布分支:在代码发展到一定阶段,建立发布分支,将当前的一个版本取出来,拷贝到branches目录下,进行全面严酷的测试,如发现BUG则在当前版本进行修复,并同步更新trunk中的BUG,经测试完成后,将文件拷贝到tags目录中发布,并提交给客户。
    b、特性分支:如果需要作复杂的修改,会影响到trunk代码的稳定性,则建议建立一个特性分支,等特性稳定之后,再和truck主干合并
34.标签TAG:它是某个项目,某个时间的一个快照,这个术语很常见,每次提交一个修订版本其实都是一个精确的快照。
35.SVN的数据存储格式有Berkeley DB和FSFS。我们现在所使用的版本默认为FSFS格式的数据存储。
36.SVN自带工具
       (要使用这些工具可以在命令行模式下输入svnadmin help、svnlook help等指令即可)
       Svnadmin:提供创建SVN版本库的功能,还可以用来维护这些版本库。
       Svnlook:用来查看版本库中不同的修订版本和事物(它不会改变版本的内容)。
       Svndumpfilter:可以简单快速的作为SVN版本库历史的以路经为基础的过滤器。
       Svnsync:将一个版本库的历史转移到另外一个上。特点是可以远程操作(“源”、“目标”版本库以及svnsysnc程序可以在不同的计算机上使用。)
37.SVN节约磁盘空间的主要方法:
1、采用增量化技术,对两组数据,只记录其中的一组,另外一组只是存放与第一组有差别的部分。
2、由于客户端和服务器网络异常,或客户端svn进程异常中止,都可能导致文件提交的事务失败,可以删除意外中止的事务。可以使用$svnadmin lstxns myrepos来清除。
38.删除不使用的Berkeley DB日志文件
       Svnadmin list –unused –dblogs /path/to/repos
       Rm ‘svnadmin list –unused-dblogs /path/to/repos’

猜你喜欢

转载自jxguoyan.iteye.com/blog/1308691