2012-11-21 57 views
1

我們使用SVN服務器1.6.9作爲我們的開發存儲庫。但從本週我們發現,一些修訂的日誌丟失:某些版本的SVN日誌消息丟失

$ 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子」獲取日誌消息:然後

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

沒有返回。

如果再加PEG修訂時的URL,然後將味精返回:

$ svn propget svn:log --revprop -r 602 http://svn.mywork.com/svn/my_system/branches/[email protected] 
This is my SVN log message 

但在「SVN日誌」添加PEG修訂url命令不仍能正常工作。

在r602中,我們通過使用「svn merge」命令實際上從分支B01到A01進行合併。所以我們很困惑,爲什麼在propget cmd中添加PEG修訂版,以及爲什麼r602 log msg從「svn log」cmd中丟失?

謝謝!

+0

'SVN proplist'請(無PEG-修訂)和'的svn propget子--xml' –

回答

1

這是完全有可能犯的Subversion版本沒有日誌消息或由幾個空間的日誌信息,只是爲了讓顛覆不問你是否要無日誌信息提交:

$ svn commit -m" " 

你確定應該有日誌消息嗎?

此外,也可以使用svn pset來完全刪除日誌消息。您的用戶是否有能力使用?

嘗試獲取--xml格式的輸出。通過這種方式,您可以查看日誌消息是否真的缺失或只有幾個空格。

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

大衛,感謝您的信息!我們確信修改的日誌信息可以通過以下方式獲得:'svn log http:// <分支的父url> -r '所以我們在「svn log」命令中使用分支URL沒有返回消息,但是如果我們使用分支的PARENT url,那麼我們可以得到日誌消息 – vliux

+0

與其他版本控制系統不同,消息是_revision_的一部分,而不是單個文件。如果你也使用'-v'標誌會發生什麼?你看到那個修訂中的文件嗎? –

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> 

所以,無論是在不斷變化的「* = r" to "* =」 SVN訪問文件或將「滿足任何」更新爲「滿意」將解決此問題。

結論: 在我們之前的配置(壞配置)中,當一個SVN HTTP請求(沒有認證信息)到達服務器時,它首先由Apache httpd處理。因爲httpd被配置爲「滿足任何」,所以「需要有效用戶」不是必需的選項,所以請求被轉發到MOD_SVN。當分支對每一個(* = r)打開時,所以MOD_SVN沒有將認證請求返回給SVN客戶端,然後嘗試從存儲庫中獲取日誌。但是獲取SVN日誌需要認證/授權令牌,所以MOD_SVN在模塊內部默默無聞,httpd只是向客戶端返回了空的日誌消息。

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日誌」命令,它打印當前目錄中的日誌信息(名爲「」在上面的列表)。由於目錄本身仍然在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'.