花了点时间把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 |
3 | A learn_svn2/trunk/configure.ac |
4 | A learn_svn2/trunk/Makefile.am |
5 | Checked out revision 17. |
显示修订版(BASE)和最后修改的修订版(COMMITED)。
01 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn st -v |
03 | 17 17 henshao configure.ac |
04 | 17 15 henshao Makefile.am |
06 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn info Makefile.am |
09 | URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/Makefile.am |
10 | Repository Root: file:///Users/henshao/svn/dogg |
11 | Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2 |
15 | Last Changed Author: henshao |
17 | Last Changed Date: 2011-06-23 17:03:08 +0800 (四, 23 6 2011) |
18 | Text Last Updated: 2011-06-23 18:37:50 +0800 (四, 23 6 2011) |
19 | Checksum: 5b211a202b8ae001a86a557108d4989c |
修改Makefile.am并签入看看。
01 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn ci Makefile.am -m "LD_ADD add ssl library" |
03 | Transmitting file data . |
06 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn info Makefile.am |
09 | URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/Makefile.am |
10 | Repository Root: file:///Users/henshao/svn/dogg |
11 | Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2 |
15 | Last Changed Author: henshao |
17 | Last Changed Date: 2011-06-23 18:41:41 +0800 (四, 23 6 2011) |
18 | Text Last Updated: 2011-06-23 18:41:31 +0800 (四, 23 6 2011) |
19 | Checksum: e4cc7bf424ff911c9619060a5f1c1030 |
21 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn info configure.ac |
24 | URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/configure.ac |
25 | Repository Root: file:///Users/henshao/svn/dogg |
26 | Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2 |
30 | Last Changed Author: henshao |
32 | Last Changed Date: 2011-06-23 17:44:51 +0800 (四, 23 6 2011) |
33 | Text Last Updated: 2011-06-23 18:37:50 +0800 (四, 23 6 2011) |
34 | Checksum: 6b49ae8f3346120311e11843c23b0b00 |
svn update一下看看。
01 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn up |
04 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn info configure.ac |
07 | URL: file:///Users/henshao/svn/dogg/learn_svn/trunk/configure.ac |
08 | Repository Root: file:///Users/henshao/svn/dogg |
09 | Repository UUID: 7ee338c4-a6e3-468b-b576-d1b767dd90e2 |
13 | Last Changed Author: henshao |
15 | Last Changed Date: 2011-06-23 17:44:51 +0800 (四, 23 6 2011) |
16 | Text Last Updated: 2011-06-23 18:37:50 +0800 (四, 23 6 2011) |
17 | Checksum: 6b49ae8f3346120311e11843c23b0b00 |
19 | [henshao@henshao ~/svn/learn_svn2/trunk]$ svn st -v |
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