SVN常用技巧及问题解决

 SVN是XP和linux下都可以使用的软件版本控制工具。

(1)以实际在XP下使用的经历来说明使用法则。

1,配置服务器端,各本地端也要安装和配置。(具体不清楚,本人只使用)

2,从SVN服务器上下载code,最普遍的使用方式就是下载一个最新的版本在本地机上使用(在XP中是点击右键SVN CHECKOUT,在LINUX中用终端命令),然后把自己的code改动加上去之后,加上标识上传至服务器,即成为最新的code。

3,其实服务器主体部分只有一个版本,上传是追加式,每次以一定的版本号只保存改动的部分上去,不过在下载使用时对用户是透明的。否则每次上传都是完整版本会占用较大服务器空间。

4,自己改动过的文件会有红色感叹号的标识,但无法明晰服务器上是否有更新。如果自己改动的跟网上的同名文件改动有冲突,或者服务器上是最新的文件,那就把服务器上的文件下载到本地,将自己的改动加上去并确认后再上传,可以上传而不致于会冲突。

5,如果网上有添加多的文件,直接下下来使用;或者自己的文件网上没有,先用SVN ADD在文件夹添加SVN信息,在用SVN COMMIT上传上去。

6,如果一次要添加的文件在不同的文件夹内,切换到共同的上层目录,在该层目录用SVN COMMIT并选择属于同一批次的改动文件即可。

7,下载Linux内核文件时,一开始在空文件夹下用点击鼠标右键check out目标SVN目录,下载到一部分就出错。正确的下载方法是:在终端中切入空文件夹目录,执行命令:svn checkout http://192.168.96.127/svn/android-mid/sw/kernel/android_kernel_f301/即可更新,再后续管理。

8,SVN 本地更新时,由于一些操作中断更新,如磁盘空间不够,用户取消。可能会造成本地文件被锁定的情况。一般出现这种情况,可以使用SVN clean up来清除锁定。

9,在Log Messages框中选择下面的show changes时,显示的只是相邻版本号的同一个文件的差别,而不是本地文件与特定版本号文件的差别,这个需要注意。

10,如果使用SVN自带的比较查看器不太习惯,可以使用通用的BC来查看,也就是用外部的比较查看器。设置方法是:右键-》SVN-》External Programmes-》Diff Viewer,选择external之后,就可以选择C盘特定的应用软件EXE就行了。

11,如果不确定某个目录是不是SVN属性,也就是不确定某个目录是不是后期编译生成的,不用上传的。只需要点击右键-》SVN-》Repo-Browser,在里面输入SVN URL路径,之后可以核对哪些目录是SVN管理的。

12,当上传错误版本后,想在本机使用之前的某个版本时,点击右键SVN后,点击update to version,输入具体想恢复的版本号,就可以了。但是如果想把当前恢复的这个上传,则会出现时间错误提示(已经过时)。此时要把这个文件在上面的框点右键然后export出来到某个目录,用新的替换掉旧的后修改一下,再上传就行。

13,当要移植修改的文件到另一个新的CODEBASE时,有一个方法可以列出修改的全部内容,用以方便比较内容。方法是右键点击“repo_browser”,选择某个工程;选择你想处理的目录,右键点击“show log”,在列出的log messages列表中,用shift键包括进所有的修改版本号的内容,右键点击“compare revisions”;在新的changed files列表中,用ctrl+a全选内容,右键点击“export selection to ”到一个新建的文件夹即可。

(2) XP系统我们很容易操作SVN,以下是linux终端常用的SVN命令说明。

1,svn update(up):更新工作拷贝,合并修改到工作拷贝。另一方面,在执行svn co时由于空间不够的原因,过程终止了。在重新腾挪出必要的空间之后,再执行svn up就可以继续之前没有完成的check out过程。实例:

$ svn update
U  foo.c
U  bar.c
Updated to revision 2.
这种情况下,其他人在你上次更新之后提交了对foo.c和bar.c的修改,因此Subversion更新你的工作拷贝来引入这些更改。认真检查svn update的输出,一个字母显示在每一个项目之前,来让你知道Subversion对你的工作拷贝做了什么操作。

       U foo:文件foo更新了(从服务器收到修改)。

       A foo:文件或目录foo被添加到工作拷贝。

       D foo:文件或目录foo在工作拷贝被删除了。

       R foo:文件或目录foo在工作拷贝已经被替换了,这是说,foo被删除,而一个新的同样名字的项目添加进来,它们具有同样的名字,但是版本库会把它们看作具备不同历史的不同对象。

       G foo:文件foo接收到版本库的更改,你的本地版本也已经修改,但改变没有互相影响,Subversion成功的将版本库和本地文件合并,没有发生任何问题。

       C foo:文件foo的修改与服务器冲突,服务器的修改与你的修改交迭在一起,不要恐慌,这种冲突需要人(你)来解决,我们在后面的章节讨论这种情况。
2,svn add,svn delete,svn copy,svn move:做出修改。

      svn add foo:预定将文件、目录或者符号链foo添加到版本库。注意:还需要用svn commit上传到服务器才算完。

      svn delete foo:预定将文件、目录或者符号链foo从版本库中删除掉。

      svn copy foo bar:建立一个新的项目bar作为foo的复制品,当在下次提交时会将bar添加到版本库。

      svn move foo bar:这个命令与与运行svn copy foo bar; svn delete foo完全相同,bar作为foo的拷贝准备添加,foo已经预定要被删除。
3,svn status,svn diff,svn revert:检验修改。当你完成修改,你需要提交他们到版本库,但是在此之前,检查一下做过什么修改是个好主意,你也可以发现你不小心修改的文件,给了你一次恢复修改的机会。

      svn status:如果你在工作拷贝的顶级目录运行不带参数的svn status命令,它会检测你做的所有的文件或目录的修改。带M标识意味着本地有修改,带!标识意味本地文件已删除。

      svn diff:你可以通过不带参数的svn diff精确的找出你所做的修改。通过该命令可以比较本地与特定版本号的某文件的差别,命令如下:svn diff -r 679 platform/mt6573/uboot/mt6573_bat.c,就是比较本地与679版本号的差别;如果是比较本地与最新版本号的差别,将679改成HEAD即可。
      svn revert:Subversion把文件恢复到服务器上最新的未修改的版本状态,举个例子,你想把一个自己更改过的文件恢复到服务器上最新的版本:

$ svn revert foo
Reverted 'foo'

        如果要将正在使用的某个文件恢复到服务器的最老的状态,我采用的方法是以XP文件夹的方式访问文件所在文件夹,然后显示show log。在目录列表中找到需要恢复的版本号,由于每次提交不止一个文件,那么可以在下方的窗口点击具体文件,右键选择revert changes from this reversion,有可能该处会显示存在merge冲突;另外也可以采取在上方的窗口点击revert to this revision恢复全部的提交文件,再逐个恢复除所需要文件之外的其他文件。

4,svn commit:提交你的修改。发送所有的修改到版本库,当你提交修改时,你需要提供一些描述修改的日志信息,你的信息会附到这个修订版本上。提交之后,会提示添加注释信息,编辑好评注,按ctrl+x保存,按回车即可。

5,svn cleanup:如果Subversion的操作中断了(举个例子:进程被杀死了,机器死掉了),日志文件会保存在硬盘上,通过重新执行日志文件,Subversion可以完成上一次开始的操作,你的工作拷贝可以回到一致的状态。这就是svn cleanup所作的:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。svn status将会使用L 显示锁定的项目:

$ svn status
  L    somedir

6,svn co:与svn checkout一样,典型用法:svn co <url> [directory]。如:

svn checkout https://svn.test.cn/book/network/     /usr/local/svn/book。

7,svn log:查看目录下的SVN工具记录的log信息。

(3)使用中的一些问题和错误的解决

 1,有时使用时,电脑工作目录workspace文件夹左下角图标显示不正常(绿勾,感叹号等都不见了),该怎么办?方法如下:默认的TSVN是不需要特别设置的。需检查一下这个设置有没有开:右键->TSVN->设置->样式->重叠图标->Status cache,里面有三个选项:1Default  2Shell  3None。如果是前面两个,应该就有svn图标,如果是none,就没有。个人实际使用时,要设定SHELL才行。

2,使用svn checkout下的目录,有时会出现权限问题。比如我用root账户checkout下的放在/home/zhangcheng下的PPP目录,用root账户可以登录编译,但是改用zhangcheng账户访问这个目录反倒不能编译。退到目录上层看,发现PPP这个目录的用户和组权限全是root,那么我们要用chown -R zhangcheng:zhangcheng PPP来改变该目录的访问属性,之后就可以用zhangcheng账户来编译了。

3,使用SVN时,有可能会出现错误:containing working copy admin area is missing。这种错误出现的原因是SVN信息目录出现损坏,比如:

svn: Directory 'E:/DEV/workspace/NH-iTV-App-VOD-PublishServer-0.1-alpha-3/classes/test/cn/.svn' containing working copy admin area is missing 。

解决方法:先删掉报错的文件夹,如'E:/DEV/workspace/NH-iTV-App-VOD-PublishServer-0.1-alpha-3/classes/test/cn,再同步,执行更新操作!

4,update时出现错误提示需要执行clean up,而我执行clean up时,又出现“Subversion reported an error while doing a cleanup!” '**' is not a working copy directory ”,此时要按步骤3的方法,手工删掉一些无用的目录,再重新Update就解决了。

5,svn up Conflict discovered in 'Makefile'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p C Makefile Updated to revision 5. Summary of conflicts: Text conflicts: 1。以上选项的意思是:p表示让文件在更新完成之后保持冲突状态;mc表示以本机文件为主,丢弃新从服务器接收的变更,并只使用你查看文件的本地修改;tc表示丢弃你对查看文件的本地修改,只使用从服务器新接收的变更。当然更可靠的方法是使用工具进行冲突解决 。

6,在XP中使用SVN时,点击某个文件再右键点击“SVN LOG”,可得知该文件的更新历史记录。其中的黑粗体版本记录即当前本机的版本,往上可以更新,往下可以恢复。如果当前文件不是最新,右键点击该文件时,可以看到跟网上的最新比较,也可以看到previos diff跟前一版本比较。另一方面,SVN LOGMESSAGE 框里面,上面的框可以获得某个版本跟当前版本的比较,下面的框可以获得某个版本跟服务器根版本的比较。
 

转载于:https://my.oschina.net/mavericsoung/blog/131459

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值