posts - 134,comments - 22,trackbacks - 0

花了点时间把svnbook看了遍,对于svn有了个比较好的认识。svn info时,修订版和最后修改的修订版总是让我感觉很困惑。要搞明白这个需要对下面几个关键字有所了解。

HEAD:版本库中的最新版本。

COMMITED:文件最后提交生成的版本号。

PREV:文件倒数第二次提交生成的版本号。

BASE:目录签出或者签入生成的版本号。

HEAD、COMMITED和PREV比较好理解,BASE比较难于理解。假设一个目录下有两个文件configure.ac和Makefile.am,第一次将它们check out出来时,会生成一个新的revision,这个便是BASE了。此时使用svn info configure.ac/Makefile.am可以发现它们的修订版是一样的,但是最后修改的修订版不同。这里的修订版对应其实就是BASE,而最后修改的修订版则是COMMITED。插一句,很多人很容易误解为啥修订版号和最后修改的修订版号不一致。

若将configure.ac修改并check in,这个时候会生成一个新的revision,configure.ac的BASE和COMMITED的值相当。而svn info Makefile.am,发现它的BASE和COMMITED没有改变。svn up一下,发现Makefile.am的BASE会变成最新的,和configure.ac相同。

签出代码库。

1[henshao@henshao ~/svn]$ svn co file:///Users/henshao/svn/dogg/learn_svn/ learn_svn2
2A    learn_svn2/trunk
3A    learn_svn2/trunk/configure.ac
4A    learn_svn2/trunk/Makefile.am
5Checked out revision 17.

显示修订版(BASE)和最后修改的修订版(COMMITED)。

01[henshao@henshao ~/svn/learn_svn2/trunk]$ svn st -v
02                17       17 henshao      .
03                17       17 henshao      configure.ac
04                17       15 henshao      Makefile.am
05  
06[henshao@henshao ~/svn/learn_svn2/trunk]$ svn info Makefile.am
07Path: Makefile.am
08Name: Makefile.am
09URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/Makefile.am
10Repository Root: file:///Users/henshao/svn/dogg
11Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2
12Revision: 17
13Node Kind: file
14Schedule: normal
15Last Changed Author: henshao
16Last Changed Rev: 15
17Last Changed Date: 2011-06-23 17:03:08 +0800 (四, 23  6 2011)
18Text Last Updated: 2011-06-23 18:37:50 +0800 (四, 23  6 2011)
19Checksum: 5b211a202b8ae001a86a557108d4989c

修改Makefile.am并签入看看。

01[henshao@henshao ~/svn/learn_svn2/trunk]$ svn ci Makefile.am -m "LD_ADD add ssl library"
02Sending        Makefile.am
03Transmitting file data .
04Committed revision 18.
05  
06[henshao@henshao ~/svn/learn_svn2/trunk]$ svn info Makefile.am
07Path: Makefile.am
08Name: Makefile.am
09URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/Makefile.am
10Repository Root: file:///Users/henshao/svn/dogg
11Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2
12Revision: 18
13Node Kind: file
14Schedule: normal
15Last Changed Author: henshao
16Last Changed Rev: 18
17Last Changed Date: 2011-06-23 18:41:41 +0800 (四, 23  6 2011)
18Text Last Updated: 2011-06-23 18:41:31 +0800 (四, 23  6 2011)
19Checksum: e4cc7bf424ff911c9619060a5f1c1030
20  
21[henshao@henshao ~/svn/learn_svn2/trunk]$ svn info configure.ac
22Path: configure.ac
23Name: configure.ac
24URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/configure.ac
25Repository Root: file:///Users/henshao/svn/dogg
26Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2
27Revision: 17
28Node Kind: file
29Schedule: normal
30Last Changed Author: henshao
31Last Changed Rev: 17
32Last Changed Date: 2011-06-23 17:44:51 +0800 (四, 23  6 2011)
33Text Last Updated: 2011-06-23 18:37:50 +0800 (四, 23  6 2011)
34Checksum: 6b49ae8f3346120311e11843c23b0b00

svn update一下看看。

01[henshao@henshao ~/svn/learn_svn2/trunk]$ svn up
02At revision 18.
03  
04[henshao@henshao ~/svn/learn_svn2/trunk]$ svn info configure.ac
05Path: configure.ac
06Name: configure.ac
07URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/configure.ac
08Repository Root: file:///Users/henshao/svn/dogg
09Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2
10Revision: 18
11Node Kind: file
12Schedule: normal
13Last Changed Author: henshao
14Last Changed Rev: 17
15Last Changed Date: 2011-06-23 17:44:51 +0800 (四, 23  6 2011)
16Text Last Updated: 2011-06-23 18:37:50 +0800 (四, 23  6 2011)
17Checksum: 6b49ae8f3346120311e11843c23b0b00
18  
19[henshao@henshao ~/svn/learn_svn2/trunk]$ svn st -v
20                18       18 henshao      .
21                18       17 henshao      configure.ac
22                18       18 henshao      Makefile.am

svn一个版本库的revision是全局的,不管是在trunk还是branch,也不管使用merge合并代码还是消除修改,签入和签出都会生成一个新的revision。当项目中一个文件签入时会导致别的文件的BASE暂时低于HEAD,但是一旦update,二者将保持一致。

posted on 2012-08-23 13:13 何克勤 阅读(3362) 评论(0)  编辑  收藏 所属分类: GNU Linux/Unix

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


网站导航: