Subversion关键词BASE, HEAD, COMMITTED, PREV的深入理解

(@转载请注明出处:http://blog.csdn.net/cmatch)
svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解。

在这里我将使用用例,诠释他们的作用和意图。

先给出svn手册中对他的解释:

“HEAD” latest in repository
“BASE” base rev of item’s working copy
“COMMITTED” last commit at or before BASE
“PREV” revision just before COMMITTED

HEAD表示在版本库中最新的版本,记住一定是版本库,而不是某个working-copy, 另外需要注意的是,这里提到版本库是指对应working-copy的那个分支或主干。

COMMITTED表示在working-copy中最近的一次提交版本。

PREV表示在working-copy中最近的倒数第二次提交版本,也就是COMMITTED – 1。

前面3个概念都是比较好理解的。

最后一个BASE有点不好理解,先给出例子,最后结论BASE的含义

1. -bash-2.05b$ svn co http://svn.corp/…/proxyio/
2. A proxylog/proxyio.procinfo
3. A proxylog/pi.cpp
4. A proxylog/Makefile
5. A proxylog/run.sh
6. Checked out revision 134057.
7.
8. -bash-2.05b$ svn st -v
9. 134057 134034 deyi.long .
10. 134057 102502 deyi.long proxyio.procinfo
11. 134057 134034 deyi.long pi.cpp
12. 134057 102674 deyi.long Makefile
13. 134057 114428 deyi.long run.sh
14. 备注:第一列表示BASE, 第二列表示COMMITTED

可以看出checkout一个working-copy后,svn会给这个working-copy分一个新的、统一的BASE版本号(如 134057)。

接下来可以修改pi.cpp代码,然后checkin,你就会发现这个文件的BASE和COMMITTED会同时增加,并且相等。如下

1. -bash-2.05b$ svn st -v
2. 134057 134034 deyi.long .
3. 134057 102502 deyi.long proxyio.procinfo
4. 134058 134058 deyi.long pi.cpp
5. 134057 102674 deyi.long Makefile
6. 134057 114428 deyi.long run.sh
7.

接下来在此目录下执行update动作,你就会发现所有文件的BASE都进行了升级,但是COMMITTED没有改变,如下

1. -bash-2.05b$ svn up
2. At revision 134058.
3.
4. -bash-2.05b$ svn st -v
5. 134058 134034 deyi.long .
6. 134058 102502 deyi.long proxyio.procinfo
7. 134058 134058 deyi.long pi.cpp
8. 134058 102674 deyi.long Makefile
9. 134058 114428 deyi.long run.sh
10.

通过上述用例,可以看出BASE表示在working-copy中每个文件基准版本,会经常变动,并且有统一working-copy的版本的意图。另外,也说明对每个文件来说,BASE就是COMMITTED的别名,但是它可以和其他文件BASE保持一致,用于统一,批量处理.

This entry was posted in Linux, Program. Bookmark the permalink.

One Response to Subversion关键词BASE, HEAD, COMMITTED, PREV的深入理解

  1. 王二 says:

    谢谢,看明白了,书是看不懂的。

Comments are closed.