posts - 262,  comments - 221,  trackbacks - 0
【12】比较本地工作副本和版本库的差异
假设我们是在一个团队的环境下工作,对于同一个项目,可能不同人会负责不同的部分。那么如何保持自己的本地副本时刻和版本库同步呢?最好的方法是经常检查更新并进行同步。

假设现在团队里的其他人向ECoupon版本库新增了一个名为ignore.txt的文件,那么我们如何知道这个变化呢?还记得我们前面《SVN In Action (3)》的第7节---查看项目的实时信息中提到的svn status命令吗?根据SVN文档只要配合--show-updates参数就可以显示本地工作副本尚未更新的变化

C:\>svn status E:\Temp\ECoupon --show-updates
       
*            E:\Temp\ECoupon\doc\ignore.txt
       
*       11   E:\Temp\ECoupon\doc
Status against revision:     
13

show-updates参数会令客户端显示本地工作副本那些文件是out-of-date的。它并不会立即更新本地副本,而是告诉你那些文件会在下次的svn update中被更新

这是本地执行后的结果。我们会看到输出的结果有"*"。那么这个*代表什么含义呢?
 * --- 服务器上出现了一个新的受版本控制的文件
 '' --- 本地工作副本的文件已经out-of-date

很明显从命令输出结果来看,在版本库上存在一个新的受版本控制的文件:ignore.txt。位于doc目录下,所以现在我们需要立即同步改变

C:\>svn update E:\Temp\ECoupon
A    E:
\Temp\ECoupon\doc\ignore.txt
Updated 
to revision 13.

C:
\>svn status E:\Temp\ECoupon --show-updates
Status against revision:     
13

【13】同时更新本地副本和提交本地变更
很多时候程序员总是习惯在每天工作结束之前,一次性地提交自己当天所做的改动。在此之前,如果其他人也对项目进行了修改,那么在提交时必然会遇到以下两个问题:

 A.先提交还是先更新
 B.如果没有提交而更新,他人所做的修改会不会覆盖我本地尚未提交的内容

下面我们来做一个实验,假设现在在本地工作副本,我们新增了一个文件:read-from-local.txt,与此同时其他人向版本库添加了一个新的read-from-repo.txt文件。下面是执行svn status命令的结果

C:\>svn status E:\Temp\ECoupon --show-updates
       
*            E:\Temp\ECoupon\read-from-repo.txt
A               
0   E:\Temp\ECoupon\read-from-local.txt
       
*       13   E:\Temp\ECoupon
Status against revision:     
14

命令结果表示有一个新的来自版本库的文件:read-from-repo.txt文件和一个本地新增的read-from-local.txt文件。

下面我们来试一下如果不更新直接提交会如何?
C:\>svn commit E:\Temp\ECoupon -"commit before update wc"
Adding         E:
\Temp\ECoupon\read-from-local.txt
Transmitting file data .
Committed revision 
15.

C:
\>svn status E:\Temp\ECoupon --show-updates
       
*            E:\Temp\ECoupon\read-from-repo.txt
       
*       13  E:\Temp\ECoupon
Status against revision:     
15

C:
\>svn update E:\Temp\ECoupon
A    E:
\Temp\ECoupon\read-from-repo.txt
Updated 
to revision 15.

可以看到操作成功了,有一点需要留意的是即便我们先提交,版本号变为15,但是执行svn status --show-updaets命令时依然会告诉我们有些东西还没有同步。特别是版本号13提醒我们现在本地的版本号依然是13而不是15---因为我们还没有执行update操作,而commit操作是不会主动帮我们update版本的。15是版本库的最新版本号。只有再次执行update操作更新后,才会真正实现本地和版本库的同步

那么如果是先更新再提交呢?
C:\>svn update E:\Temp\ECoupon
A    E:
\Temp\ECoupon\read-from-repo.txt
Updated 
to revision 17.

C:
\>svn status E:\Temp\ECoupon --show-updates
A               
0   E:\Temp\ECoupon\read-from-wc.txt
Status against revision:     
17

C:
\>svn commit E:\Temp\ECoupon -"commit after update"
Adding         E:
\Temp\ECoupon\read-from-wc.txt
Transmitting file data .
Committed revision 
18.

C:
\>svn status E:\Temp\ECoupon --show-updates
Status against revision:     
18

结果依然是同样的。我们可以看到先update再commit时版本号变更了两次,这是因为第一次本地版本比版本库的版本低,第二次是因为本地提交了新的版本


-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2009-12-08 21:50 Paul Lin 阅读(247) 评论(0)  编辑  收藏 所属分类: 项目管理

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜