缺少某些修订的SVN日志消息

时间:2012-11-21 13:16:40

标签: svn logging

我们正在使用SVN服务器1.6.9作为我们的开发存储库。但从本周开始,我们发现缺少一些修订的日志:

$ svn log http://svn.mywork.com/svn/my_system/branches/A01 -l 3
------------------------------------------------------------------------
r675 | yin.su | 2012-11-14 10:21:03 +0800 (Wed, 14 Nov 2012) | 1 line

instant msg model impl 
------------------------------------------------------------------------
r602 | svnsync | 2012-10-26 19:47:29 +0800 (Fri, 26 Oct 2012) | 1 line


------------------------------------------------------------------------

因此缺少r602的日志消息。 此外,我们尝试使用“svn propget”来检索log msg:

$ svn propget svn:log --revprop -r 602 http://svn.mywork.com/svn/my_system/branches/A01

当然没有任何回报。

如果我们将PEG revison添加到url,则返回msg:

$ svn propget svn:log --revprop -r 602 http://svn.mywork.com/svn/my_system/branches/A01@HEAD
This is my SVN log message

但是在“svn log”命令中将URL修订添加到url仍然不起作用。

在r602中,我们实际上通过使用“svn merge”命令从分支B01到A01进行了合并。所以我们很困惑为什么在propget cmd中添加PEG修订版,以及为什么“svn log”cmd中缺少r602 log msg?

谢谢!

3 个答案:

答案 0 :(得分:1)

完全有可能在没有日志消息的情况下提交Subversion修订版或者包含一些空格的日志消息,只是为了让Subversion不要询问您是否要在没有日志消息的情况下提交:

$ svn commit -m" "

您确定应该有日志消息吗?

此外,还可以使用svn pset来完全删除日志消息。您的用户是否可以使用svn pset --revprops

尝试以--xml格式获取输出。这样,您可以查看日志消息是否真的丢失,或者只是几个空格。

$ svn log --xml -v -r602 $REPO | less

答案 1 :(得分:0)

抱歉回来晚了! 这个问题终于解决了。根本原因是Apache身份验证的错误配置!

现象是只缺少合并日志消息,所以我试着看看Apache访问日志,发现了这个:

10.14.21.75 - - [22/Nov/2012:13:22:05 +0800] "OPTIONS /svn/opencore/branches/ali00304473_Other_20120426_opencore HTTP/1.1" 200 192
10.14.21.75 - - [22/Nov/2012:13:22:05 +0800] "PROPFIND /svn/opencore/branches/ali00304473_Other_20120426_opencore HTTP/1.1" 207 772
10.14.21.75 - - [22/Nov/2012:13:22:05 +0800] "PROPFIND /svn/opencore/!svn/vcc/default HTTP/1.1" 207 1040

请求中未标识用户名!然后我发现分支的SVN访问权限设置为允许每个人阅读:

[opencore:/branches/ali00304473_Other_20120426_opencore]
* = r

此外,在httpd.conf中,它的配置如下:

<Location /svn/>
        DAV svn
        SVNParentPath /home/admin/svnroot
        AuthBasicProvider file ldap
        AuthType Basic
        .....
        AuthUserFile /home/admin/svnfiles/svn-auth-file
        Satisfy Any
        Require valid-user
        AuthzSVNAccessFile /home/admin/svnfiles/svn-access-file
</Location>

因此,要么在SVN访问文件中更改“* = r" to "* =”,要么将“满足任何”更新为“满足所有”将解决问题。

结论: 在我们之前的配置(错误配置)中,当SVN HTTP请求(没有auth信息)到达服务器时,它首先由Apache httpd处理。因为httpd被配置为“Satisfy Any”,所以“Require valid-user”不是必需的选项,因此请求被转发到MOD_SVN。由于分支对每个分支(* = r)开放,因此MOD_SVN没有将认证请求上升回SVN客户端,然后它尝试从存储库中获取日志。但是获取SVN日志需要身份验证/授权令牌,因此MOD_SVN在模块内部无声地失败,而httpd只是将空的日志消息返回给客户端。

答案 2 :(得分:0)

以下常见问题解答中的条目值得一读,因为它不是我期望从svn日志中获得的行为。 http://svn.apache.org/repos/asf/subversion/branches/server-l10n/www/faq.html#hidden-log

我看不到我刚刚提交的文件的日志条目。为什么?

假设您在存储库上运行'svn checkout'并在版本7(aka,r7)上接收一个工作副本,其中包含一个名为foo.c的文件。您修改文件并成功提交。发生了两件事:

The repository moves to r8 on the server.
In your working copy, only the file foo.c moves to r8. The rest of your working copy remains at r7.

您现在拥有所谓的混合修订工作副本。一个文件位于r8,但所有其他文件保留在r7,直到它们也被提交,或者直到'svn update'运行。

   $ svn -v status
   7        7 nesscg       .
   8        8 nesscg       foo.c
   $

如果运行不带任何参数的'svn log'命令,它将打印当前目录的日志信息(在上面的清单中名为'。')。由于目录本身仍在r7,因此您看不到r8的日志信息。

要查看最新日志,请执行以下操作之一:

Run 'svn log -rHEAD'.
Run 'svn log URL', where URL is the repository URL.
Ask for just that file's log information, by running 'svn log foo.c'.
Update your working copy so it's all at r8, then run 'svn log'.