2012-09-10 87 views
0

我配置我的svn存儲庫通過Apache訪問它。無法連接到svn與烏龜svn,但可以通過網絡瀏覽器

我可以通過任何帶有這些地址的網頁瀏覽器訪問它。

http://svn.domain.com 
http://www.domain.com:3690 

但是,當我試圖與TortoiseSNV簽在Windows或Linux上的命令行,第一個返回:「不可用URI:它沒有這個倉庫」,第二個運行幾小時並以超時錯誤結束。 (我也試過svn://domain.com做同樣的事情)

我讀到mod_rewrite可以用於這個問題的某些事情,但我沒有看到任何方式來解決這個問題,除了通過刪除mod_rewrite的。

但我需要mod_rewirte這個服務器上的網站。

問題是什麼?

有沒有辦法同時運行mod_dav_svn和mod_rewrite?

編輯

虛擬主機的conf文件看起來像這樣:

<Directory /path/to/subdomain> 
    DAV svn 
    SVNPath /path/to/repos 
    AuthType Basic 
    AuthName "Repos Name" 
    AuthUserFile /path/to/auth-user/file 
    Require valid-user 
</Directory> 

我將此添加到httpd.conf文件:

Listen 3690 
NameVirtualHost *:3690 

<VirtualHost *:3690> 
    ServerName svn.domain.com 
    <Location /> 
    DAV svn 
    AuthType Basic 
    AuthName "Repos Name" 
    AuthUserFile /path/to/auth-user/file 
    SVNPath /path/to/repos 
    Require valid-user 
    </Location> 
</VirtualHost> 

回答

0

您不能檢查出一個域名,並且您無法更改協議,並期望另一端的服務器突然開始討論該新協議。

您的網站正在向SVN服務器發出SVN請求,然後將請求格式化爲HTML。這意味着http://svn.domain.com不是SVN網址。你需要了解什麼是SVN URL,它包含至少一個項目名稱,像這樣protocol://server/projectname

mod_rewrite的是自動改寫一個網址到另一個的好工具;但是,如果您在此時使用mod_rewrite,則只會在編程式地重寫您的url的圖層下隱藏您的mod_dav_svn配置問題。解決這個問題要困難得多,因爲你在沒有解決第一個問題的情況下引入了一個新問題(URL重寫是否被破壞?)。

+0

我配置了apache來偵聽端口3690,並且我還配置了svn子域,並且它們都指向一個svn項目。 Web瀏覽器中顯示的頁面是我一直使用的存儲庫頁面。 – Marm

+0

我的URL重寫沒有中斷。規則是在每個域的htaccess文件中進行的。所以他們不應該影響svn子域名或端口重定向的權利? – Marm

+0

該URL不是完整的URL。這是一個域名,依靠服務器配置的值來提供資源。 SVN每臺服務器提供多個項目。 –

0

好的,你爲什麼使用HTTP端口3690?

Subversion可以使用幾種不同的協議來訪問存儲庫。但是,你不能混合n匹配。如果您使用的是Apache HTTP作爲您的服務器,你只能使用HTTP協議:

$ svn co http://svn.domain.com/<srvrInst>/path/to/your/repository 

在Apache中,域後,通常有服務器實例,因爲多個服務器實例可以連接到一個Apache實例。大部分時間,這只是svn,雖然我看過來源使用。這是在你的Apache HTTP配置中配置的。

基本上,您可以在網頁瀏覽器中瀏覽的任何目錄應該允許您檢查它。但是,如果您有SVNListParentPath,則有一個例外。所有存儲庫的父目錄不能是檢出。否則,您可以檢出任何您可以瀏覽的目錄。

可以通過svnserve和Apache http同時服務於同一個存儲庫。如果你這樣做,你可以使用Apache http協議或svn協議。

如果這不能解決您的問題,您必須提供更多信息。例如,你的Apache http配置是什麼樣的。你可以瀏覽什麼網址,但不結賬?記住在Subversion下,你只能檢出目錄而不能檢出文件。如果你需要一個文件,你可以使用svn cat這個文件並將輸出重定向到一個文件。


虛擬主機的conf文件看起來像這樣:

<Directory /path/to/subdomain> 
    DAV svn 
    SVNPath /path/to/repos 
    AuthType Basic 
    AuthName "Repos Name" 
    AuthUserFile /path/to/auth-user/file 
    Require valid-user 

我相信你的問題是Directory指令本身。這是假設指定您的存儲庫所在域的目錄。通常情況下,它只是類似svnsource,所以您可以這樣做結帳:$ svn co http://svn.domain.com/svn/repo$ svn co http://svn.domain.com/source/repo。看看它在之後你的域名在URL中?

我從來沒有嘗試過這樣的多級目錄。你想讓人們指定http://svn.domain.com/path/to/subdomain/repo做結帳嗎?結帳URL已經很長了,所以我無法想象爲這件事添加更多的目錄。

你說你可以通過瀏覽器瀏覽版本庫。如果是這樣的話,你應該能夠從Web瀏覽器中刪除該URL(只要它是一個目錄而不是文件)並將其粘貼到Tortoise或Subversion命令行中。

順便說一句,我看你有AuthUserFile集。也許問題是你需要指定用戶名和密碼?暫時停留在端口3690上偵聽的虛擬主機。如果您確實想要使用該端口,請在存儲庫服務器上運行svnserve,並讓人們使用snv://協議。

+0

看看我的文章編輯的conf文件內容。 svn.domain.com已經指向了回購目錄。我添加了端口3690,因爲使用http協議,它不起作用。這對我來說並不是必需的,但它對於http訪問有或沒有做同樣的事情。 – Marm

+0

SVNListParentPath做什麼? – Marm

+0

如果你有一堆獨立的版本庫,你可以使用'SVNParentPath'來指定所有版本庫的父目錄,然後爲它們全部使用一個虛擬目錄。如果將'PSVNListParentPath'設置爲'on',則可以使用Web瀏覽器訪問該虛擬目錄,並列出所有的存儲庫。你不能用命令行來做到這一點,並且你不能簽出那個虛擬目錄。這只是一個Web瀏覽器獎金。 –