【6】查看项目的版本控制信息 在上一节,我们成功地为项目ECoupon添加了版本控制功能,现在我们想看看添加了版本控制功能的项目,到底有什么不同。应该如何做呢? 还记得我们在《SVN In Action (1)》的第2节--访问版本库中那个命令列表吗?其中的第2列就是“显示版本信息”。我们可以看到和svn list以及svnlook tree命令一样,SVN同样为服务端和客户端提供了两个命令。它们就是: A.svn info:用于客户端查看版本信息 B.svnlook info:用于服务端查看版本信息 为了让大家有一个感性的认识,我先演示这两个命令的输出: C:\>svn info E:\Temp\ECoupon Path: E:\Temp\ECoupon URL: http://localhost:8000/svn/Workspace/Ericsson/ECoupon Repository Root: http://localhost:8000/svn/Workspace Repository UUID: 06f3a259-b3b5-ff4e-9a70-52e8834f1976 Revision: 5 Node Kind: directory Schedule: normal Last Changed Author: qlinpen Last Changed Rev: 4 Last Changed Date: 2009-12-07 17:33:17 +0800 (星期一, 07 十二月 2009) C:\>svnlook info C:\Develop\MyRepository\Workspace \Ericsson\ECoupon qlinpen 2009-12-07 17:34:54 +0800 (星期一, 07 十二月 2009) 25 create project Newsletter 可以看到虽然同样都是info子命令,但是两者的执行结果完全不同。实际上他们的输出主要包括 A.svn info:显示本地或远程条目(Item)指定版本的信息 B.svnlook info:显示指定版本的条目(Item)的作者、时间戳、日志大小、日志内容 对于svn info,它可以显示的内容非常多,有: •Path •Name •URL •RepositoryRoot •RepositoryUUID •Revision •NodeKind •LastChangedAuthor •LastChangedRevision •LastChangedDate •LockToken •LockOwner •LockCreated(date) •LockExpires(date) 除此之外还有一些额外的选项。可以看到svn info命令比svnlook info命令好用多了!实际上svn info命令不单可以用于显示本地条目信息,也可以用于显示远程(版本库)条目的信息: C:\>svn info http://localhost:8000/svn/Workspace/Ericsson/ECoupon Path: ECoupon URL: http://localhost:8000/svn/Workspace/Ericsson/ECoupon Repository Root: http://localhost:8000/svn/Workspace Repository UUID: 06f3a259-b3b5-ff4e-9a70-52e8834f1976 Revision: 5 Node Kind: directory Last Changed Author: qlinpen Last Changed Rev: 4 Last Changed Date: 2009-12-07 17:33:17 +0800 (星期一, 07 十二月 2009) 可以看到除了第一个输出Path有所不同之外,其它版本信息都是和本地工作拷贝(Working Copy)一致的。svn info命令不单可以用于显示目录的信息,对于文件同样也可以。而对于svnlook info命令,依然要记得的两点是: A.只能使用本地路径形式作为svnlook info命令的参数,不能使用URL B.可以使用PATH_IN_REPOS来限制只显示父路径下某个子路径的信息 【7】查看项目的实时状态信息 到目前为止,我们的ECoupon项目还是一个空的目录,下面我们将为它添加若干内容:doc目录、src目录、WebRoot目录。手工拷贝这三个目录到E:\Temp\ECoupon目录下。既然我们的项目已经加入了版本控制功能,那么现在我们的项目有了新的资源,SVN如何得知这种改变呢?或者说其他人如何知道呢? 还是回到我们的《SVN In Action (1)》系列的第2节--访问版本库,可以看到在那个命令列表的最后一列上边有一个:svn status命令。对了!就是这个命令。 svn status:显示本地工作拷贝和目录的状态信息 请注意的一点就是和svn list、svn info不同,svn status只能使用本地路径作为参数,也就是说你不能使用诸如:svn status http://...这样的命令。 svn status命令可以搭配不同的参数来显示不同的信息: A.如果不加任何参数,将显示所有本地修改的条目状态信息 B.如果配合--show-updates参数,将额外显示所有本地out-of-date的条目信息 C.如果配合--verbose参数,将显示详尽的状态信息,包括所有没有改变的条目 D.如何配合--quiet参数,将只显示所有本地修改的条目的简介信息 和svn info命令相同,svn status会输出一大堆的内容。svn status的输出中,需要特别注意的是每一行的前6个字符,它们分别表示了6种不同的信息。现在我们需要关注的是前3个 A.列1:显示该条目是属于新增(A)、修改(M)、还是被删除(D)或者其它的改变 B.列2:显示该条目(文件、目录)属性的状态 C.列3:显示该条目是否处于“锁定”状态(L) 现在我们来执行一下svn status命令 C:\>svn status E:\Temp\ECoupon ? E:\Temp\ECoupon\WebRoot ? E:\Temp\ECoupon\doc ? E:\Temp\ECoupon\src 很明显地我们看到在新增加的三个目录前面都有一个?,这说这三个目录都还没有加入版本控制。如果需要再详细地输出,只需要添加:--verbose参数 C:\>svn status E:\Temp\ECoupon --verbose 5 4 qlinpen E:\Temp\ECoupon ? E:\Temp\ECoupon\WebRoot ? E:\Temp\ECoupon\doc ? E:\Temp\ECoupon\src 5 4 qlinpen E:\Temp\ECoupon\my_VPN.txt 如果我们想查看除了本地修改之外,版本库中是不是有新的修改出现,而我们尚未同步到本地工作拷贝的,只需要添加:--show-updates参数 C:\>svn status E:\Temp\ECoupon --verbose --show-updates ? E:\Temp\ECoupon\doc 5 4 qlinpen E:\Temp\ECoupon\my_VPN.txt ? E:\Temp\ECoupon\src ? E:\Temp\ECoupon\WebRoot 5 4 qlinpen E:\Temp\ECoupon Status against revision: 5 可以看到和上一个命令执行结果相比,多出了一句话“Status against revision: 5 ”。这是因为: A.当svn status命令不带任何参数或只带除了--show-updates外的其他参数时,并不访问版本库。而是和本地的.svn目录比较 B.当svn status命令搭配--show-updates参数后,将会访问版本库。 我们可以看到ECoupon目录和my_VPN.txt文件都是在版本号为4的时候创建的,当前版本号是5。 ------------------------------------------------------------- 生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
可以看到虽然同样都是info子命令,但是两者的执行结果完全不同。实际上他们的输出主要包括 A.svn info:显示本地或远程条目(Item)指定版本的信息 B.svnlook info:显示指定版本的条目(Item)的作者、时间戳、日志大小、日志内容 对于svn info,它可以显示的内容非常多,有: •Path •Name •URL •RepositoryRoot •RepositoryUUID •Revision •NodeKind •LastChangedAuthor •LastChangedRevision •LastChangedDate •LockToken •LockOwner •LockCreated(date) •LockExpires(date) 除此之外还有一些额外的选项。可以看到svn info命令比svnlook info命令好用多了!实际上svn info命令不单可以用于显示本地条目信息,也可以用于显示远程(版本库)条目的信息: