本文向大家介绍一下SVN简易使用手册,SVN现在用处越来越广,所以大家有必要知道SVN是什么以及如何使用,本文就给大家讲解一下。
本节接着上节简单介绍一下SVN简易使用手册,在学习SVN的过程中这些是必须掌握的内容,在这里和大家分享一下,希望通过本节的学习大家能够掌握SVN的使用,让我们一起来学习SVN简易使用手册吧。
另一种检查修改的方式是svndiff命令,你可以通过不带参数的svndiff精确的找出你所做的修改,这会输出统一区别格式:[3]
$svndiffIndex:bar.c===================================================================---bar.c(revision3)+++bar.c(workingcopy)@@-1,7+1,12@@+#include<sys/types.h>+#include<sys/stat.h>+#include<unistd.h>++#include<stdio.h>intmain(void){-printf("Sixty-fourslicesofAmericanCheese...\n");+printf("Sixty-fiveslicesofAmericanCheese...\n");return0;}Index:README===================================================================---README(revision3)+++README(workingcopy)@@-193,3+193,4@@+Notetoself:pickuplaundry.Index:stuff/fish.c===================================================================---stuff/fish.c(revision1)+++stuff/fish.c(workingcopy)-Welcometothefileknownas'fish'.-Informationonfishwillbeheresoon.Index:stuff/things/bloo.h===================================================================---stuff/things/bloo.h(revision8)+++stuff/things/bloo.h(workingcopy)+Hereisanewfiletodescribe+thingsaboutbloo.
svndiff命令通过比较你的文件和.svn的“原始”文件来输出信息,预定要增加的文件会显示所有增加的文本,要删除的文件会显示所有要删除的文本。
输出的格式为统一区别格式(unifieddiffformat),删除的行前面加一个-,添加的行前面有一个+,svndiff命令也打印文件名和打补丁需要的信息,所以你可以通过重定向一个区别文件来生成“补丁”:$svndiff>patchfile
举个例子,你可以把补丁文件发送邮件到其他开发者,在提交之前审核和测试。svnrevert假设你通过上面的diff输出发现你不小心用编辑器在README中输入了一些字符。
这是使用svnrevert的好机会。
$svnrevertREADMEReverted'README'
Subversion把文件恢复到未修改的状态,叫做.svn目录的“原始”拷贝,应该知道svnrevert可以恢复任何预定要做的操作,举个例子,你不再想添加一个文件:
$svnstatusfoo?foo$svnaddfooAfoo$svnrevertfooReverted'foo'$svnstatusfoo?foo
注意:
SVN简易使用手册中有些需要注意的问题。svnrevertITEM的效果与删除ITEM然后执行svnupdate-rBASEITEM完全一样,但是,如果你使用svnrevert它不必通知版本库就可以恢复文件。
或许你不小心删除了一个文件:$svnstatusREADMEREADME$svndeleteREADMEDREADME$svnrevertREADMEReverted'README'$svnstatusREADMEREADME
看!没有网络!
这三个命令(svnstatus、svndiff和svnrevert)都可以在没有网络的情况下工作,这让你在没有网络连接时的管理修改过程更加简单,像在飞机上旅行,乘坐火车往返或是在海滩上奋力工作时。
Subversion通过在.svn管理区域使用原始的版本缓存来做到这一点,这使得恢复本地版本而不必访问网络,这个缓存(叫做“text-base”)也允许Subversion可以根据原始版本生成一个压缩的增量(“区别”)提交—即使你有个非常快的网络,有这样一个缓存有极大的好处,非常的快,只向服务器提交修改的部分,这一点乍一看好像并不重要,但当你要提交一个400M大小的文件的修改时,你就会明白!
解决冲突(合并别人的修改)
我们学习SVN简易使用手册时可以使用svnstatus-u来预测冲突,当你运行svnupdate一些有趣的事情发生了:
$svnupdateUINSTALLGREADMECbar.cUpdatedtorevision46.
U和G没必要关心,文件干净的接受了版本库的变化,文件标示为U表明本地没有修改,文件已经根据版本库更新。G标示合并,标示本地已经修改过,与版本库没有重迭的地方,已经合并。但是C表示冲突,说明服务器上的改动同你的改动冲突了,你需要自己手工去解决。
当冲突发生了,有三件事可以帮助你注意到这种情况和解决问题:
Subversion打印C标记,并且标记这个文件已冲突。
如果Subversion认为这个文件是可合并的,它会置入冲突标记—特殊的横线分开冲突的“两面”—在文件里可视化的描述重叠的部分(Subversion使用svn:mime-type属性来决定一个文件是否可以使用上下文的,以行为基础合并,更多信息可以看“svn:mime-type”一节)。
对于每一个冲突的文件,Subversion放置三个额外的未版本化文件到你的工作拷贝:filename.mine
你更新前的文件,没有冲突标志,只是你最新更改的内容。(如果Subversion认为这个文件不可以合并,.mine文件不会创建,因为它和工作文件相同。)
filename.rOLDREV
这是你的做更新操作以前的BASE版本文件,就是你在上次更新之后未作更改的版本。
filename.rNEWREV
这是你的Subversion客户端从服务器刚刚收到的版本,这个文件对应版本库的HEAD版本。
这里OLDREV是你的.svn目录中的修订版本号,NEWREV是版本库中HEAD的版本号。
举一个例子,Sally修改了sandwich.txt,Harry刚刚改变了他的本地拷贝中的这个文件并且提交到服务器,Sally在提交之前更新它的工作拷贝得到了冲突:
$svnupdateCsandwich.txtUpdatedtorevision2.$ls-1sandwich.txtsandwich.txt.minesandwich.txt.r1sandwich.txt.r2
在这种情况下,Subversion不会允许你提交sandwich.txt,直到你的三个临时文件被删掉。
$svncommit--message"Addafewmorethings"svn:Commitfailed(detailsfollow):svn:Abortingcommit:'/home/sally/svn-work/sandwich.txt'remainsinconflict
如果你遇到冲突,三件事你可以选择:
“手动”合并冲突文本(检查和修改文件中的冲突标志)。
用某一个临时文件覆盖你的工作文件。运行svnrevert<filename>来放弃所有的修改。一旦你解决了冲突,你需要通过命令svnresolved让Subversion知道,这样就会删除三个临时文件,Subversion就不会认为这个文件是在冲突状态了。[4]$svnresolvedsandwich.txtResolvedconflictedstateof'sandwich.txt'。请关注有关SVN简易使用手册下节介绍。