刚刚在本目录下执行一个提交,然后执行 \"svn log\",怎么看不到最新的提交?

http://www.ossxp.com/HelpCenter/00030_Subversion/00050_FAQ/#HelpCenter.2BAC8-00030_Subversion.2BAC8-00050_FAQ.2BAC8-SVN_00010_MIXED_REVISION.HelpCenter.2BAC8-00030_Subversion.2BAC8-00050_FAQ.2BAC8-SVN_00010_MIXED_REVISION

“明明是刚在本目录下执行了一次提交,为什么"svnlog",看不到呢?”

如果您是使用分布式版本控制工具(如git,hg,bzr),或者使用CVS的用户,会对此现象感到非常奇怪。

原因分析:

*

问题的实质是SVN的混杂版本号。

o

(!)执行"svnstatus-v"命令可以看到当前目录处于混杂版本状态。

*

不同的版本控制工具使用不同的方法记录本地工作目录下文件的状态

o

分布式版本控制工具在工作区的最顶级目录包含唯一一个控制目录(如.git,.hg,.bzr──实际为版本库本身)

o

Subversion在每一个工作目录下都包含一个名为.svn的控制目录,记录着每一个文件以及当前目录的版本号

o

相比之下,Subversion虽然采用了全局版本号,但本地记录目录和文件的版本散布在各个.svn目录中

*

当刚刚完成一次提交,仅仅该次提交涉及的文件在.svn控制目录中记录的版本号是最新的,其它的文件包括目录本身的版本号还是旧的。

*

“难道提交不应该自动更新所有文件和目录状态么?”

o

但这是不合理的,可能由于他人的修改破坏当前工作区,因此只有主动执行"svnupdate"命令,才进行更新。

解决办法:

*

在目录下执行一次"svnupdate",之后再执行"svnlog",就在日志中能够看到刚刚的提交。或者使用命令"svnlog-rHEAD:1"也可以看到最新提交实践出现在log中。