2012-01-13 162 views
0

我目前正在從Linux遷移回購到Windows。我遇到的問題是,當加載新的存儲庫時,層次結構爲[reponame]\[reponame]。有沒有辦法將所有文件夾上移一層?SVN加載新存儲庫

UPDATE

使用下面的命令來獲得回購負載 svnadmin的負載[回購]> [repofile]使用.dump

+3

您正在採取哪些步驟來執行遷移?瞭解你正在做的事情會使你更容易知道你需要採取什麼不同的方式來實現你的目標。 – cdeszaq 2012-01-13 14:53:34

回答

0

什麼是Unix下的庫層次?你在那裏使用http嗎?

我不是100%確定你的意思。你是說存儲庫包含一個包含存儲庫名稱的目錄嗎?或者,你是說當你做結賬時,你現在做的是這樣的:

C> svn co http://server/foo/foo/trunk 

結帳命令現在看起來像什麼?

當您說存儲庫您是在談論使用svnadmin create命令創建的單個存儲庫目錄,還是您正在談論單個存儲庫中的多個項目?

比方說,我正在使用svnserve來爲我的存儲庫提供服務。我們會打電話給我的存儲庫myproj,我想在我的機器softserve上提供我的存儲庫。當我想要結帳時,我這樣做:

$ svn co svn://softserve/trunk myproj-trunk 

注意我只有我的服務器的名稱。該URL甚至不包括我的存儲庫的名稱。這是因爲svnserve只能提供一個存儲庫。如果我有多個存儲庫,那麼必須要有獨立的機器,將所有存儲庫合併到一個存儲庫中,或者使用不同的端口。

Apache可以爲多個存儲庫提供服務,但每個存儲庫都需要一個虛擬web目錄進行訪問,所以Apache知道它何時將URL看作是Subversion存儲庫而不是httpdocs目錄中的目錄。因此,Apache URL中至少還有一個目錄。

指定Apache Subversion存儲庫有兩種不同的方式。您可以指定一個單獨的存儲庫,如下所示:

<Location /myproj> 
    DAV svn 
    SVNPath C:/path/to/repository/myproj 
</Location> 

<Location /project_two> 
    DAV svn 
    SVNPath C:/path/to/repository/project_two 
</Location> 

在這種情況下,每個Apache虛擬目錄都有一個存儲庫。因此,當我做了結賬,我命令如下:

$ svn co http://softserve/myproj/trunk myproj-trunk 

請注意,有一個在這個URL在SVN URL額外的目錄。這是因爲我現在不僅需要指定服務器,還需要指定Apache虛擬目錄。在這種情況下,我讓我的虛擬目錄名稱與我的存儲庫名稱保持一致。我沒有必要這樣做,但是否則會很愚蠢。

就用戶而言,他們只是將存儲庫名稱添加到URL中。它仍然是有道理的。如果我想從myproj結帳,我使用http://softserve/myproj,如果我想從project_two結帳,我使用http://softserve/project_two

但是,有時一家公司可能會有數百個Subversion版本庫,它們在Subversion服務器上提供服務。在Apache配置中指定每個存儲庫都很困難,特別是如果他們不斷添加新項目並刪除舊項目。

要解決此問題,可以使用SVNParentPath規範而不是SVNPath。這使您可以指定不Subversion版本庫目錄,但父目錄,它應該駐留:

<Location /source> 
    DAV svn 
    SVNParentPath C:/path/to/repository 
</Location> 

現在,我可以把我所有的存儲庫的一個目錄下,我的服務器上,而Apache會自動爲他們服務所有。當創建一個新的倉庫時,我只需要將它放在我的SVNParentPath下。我不必修改我的Apache配置。

的問題是我現在必須指定不僅在Apache虛擬目錄,也存儲庫名稱。因此,我的網址有另一個目錄在裏面。 (在這種情況下,我打電話給我的Apache Parent虛擬目錄source)。

$ svn co http://softserve/source/myproj/trunk myproj-trunk 

我剛剛下載VisualSVN服務器,並看着它。 VisualSVN Server在後端運行Apache。它只是爲你自動配置它,並創建一個不錯的簡單前端。看看在C:\Program Files\VisualSVN Source\conf\httpd.conf下創建的Apache配置,我看到:

我可以想象當你設置VisualSVN時,它會自動完成後者。畢竟,這就是人們爲VisualSVN支付費用的原因 - 它負責爲您處理所有的Apache存儲庫處理。而且,你的情況,你做了,導致這樣的事情:

<Location /foo> 
    DAV svn 
    SVNPath C:/path/to/repository 
</Location> 

而且,C:/path/to/repository下唯一的倉庫就是你的foo庫。因此,您的網址是這樣的:

<Location /svn/> 
    [...] 
    SVNParentPath C:/Repositories/ 
    [...] 
</Location> 

所以,如果你把你的fooC:\Repositories下,結帳看起來是這樣的:

svn co http://softserve/svn/foo/trunk foo-trunk 

我沒有玩的VisualSVN服務器,看看如果我可以從前端改變svn Apache的虛擬目錄的名稱,但我可以想像,你買的完整版本,讓更多的配置,你命名你的目錄中的名稱相同庫名稱。因此,你必須

<Location /foo/> 
    [...] 
    SVNParentPath C:/Repositories/ 
    [...] 
</Location> 

而且,當你從foo看看,你會得到這樣的:

svn co http://softserve/foo/foo/trunk foo-trunk 

你提到的雙存儲庫的名稱。

我可以想像,你可以破解的原始http.conf文件中使用SVNPath代替SVNParentPath,因此您的網址將是這樣的:

svn co http://softserve/foo/trunk foo-trunk 

但是,我不知道SVN將如何處理視覺那。我懷疑你最好的辦法就是把你的Apache虛擬目錄名改回默認的svn或者改成sourcesrc