2012-04-04 22 views
0

我有一個SVN倉庫處的爲什麼「svn mkdir URL」不起作用,並且「svn import ... URL」在同一個URL上工作正常?

https://hostname/svn/repo 

在其多個項目設置,像

https://hostname/svn/repo/proj_a 
https://hostname/svn/repo/proj_b 
https://hostname/svn/repo/proj_c 

我可以與現有項目的工作沒有問題,我可以籤任何人,提交更改,列表內容...

現在我想在版本庫創建一個新的項目,但如果我嘗試

svn mkdir https://hostname/svn/repo/new_project 

在命令行中,我得到了臭名昭著的

Repository moved permanently to 'https://hostname/svn/repo/'; please relocate 

錯誤消息。如果我嘗試使用svn ls列出存儲庫內容,情況也是如此。如果不是之前創建新項目文件夾並稍後添加文件,我在Eclipse中右鍵單擊new_project文件夾,然後「共享項目」一切正常。在Eclipse中共享項目應該等同於做

svn import new_project https://hostname/svn/repo/new_project/trunk 

在命令行上,對嗎?我沒有得到什麼?存儲庫有什麼問題?

編輯上述mkdir命令是錯誤的,因爲阿爾瓦羅·維卡里奧G.在his reply

更新注意到看起來像this entry in the FAQ可以(通過serverfault

回答

0
   svn mkdir https://hostname/svn/  new_project 
svn import new_project https://hostname/svn/repo/new_project/trunk 
              ^^^^ 
+0

哎呀,不,這只是一個錯誤的問題。 – agnul 2012-04-04 10:29:45

+0

然後我會說你的Apache被配置爲當你省略斜線時發送重定向狀態碼。不知道這件事。 – 2012-04-04 10:38:23

1

這個問題可能是有關如何你的Subversion 知識庫(是的,你可以有更多的t han一個存儲庫)使用Apache進行安裝。

使用Apache,有兩種設置Subversion版本庫的方法。您可以單獨做每個存儲庫這樣的:

<Location /svn/repos> 
    DAV svn 
    SVNPath /path/to/repositories/repos 
</Location> 
<Location /svn/repos2> 
    DAV svn 
    SVNPath /path/to/repositories/repos2 
</Location> 

在這種情況下,你可以通過https://hostname/svn/reposhttp://hostname/svn/repos2達到這些存儲庫。

正如你所想象的,如果你有很多存儲庫,維護起來可能相當困難。每次創建新的存儲庫意味着更新您的Apache配置。如果你有50個左右的軟件倉庫,你會有一個非常長的配置文件,很難維護。

爲了解決這個問題,阿帕奇允許您配置一大堆Subversion版本庫的一個配置:

<Location /svn/repo> 
    DAV svn 
    SVNParentPath /path/to/all/svn_repositories 
</Location> 

現在,如果你有倉庫/path/to/all/svn_repositories/proj_a/path/to/all/svn_repositories/proj_b,您可以通過http://myserver/svn/repo/proj_ahttp://myserver/svn/repo/proj_b達到這些目標。

請注意,https://myserver/svn/repo不是單個存儲庫的根目錄,而是代表包含所有存儲庫的目錄的Apache 虛擬目錄。

現在,這裏是573,198.52美元的問題($ 64,000問題w /通貨膨脹):如果您提交到http://hostname/svn/repo/proj_a,它是否更新最新修訂版號http://myserver/svn/repo/proj_b呢?如果沒有,那麼每個項目都是一個單獨的Subversion存儲庫,並按照我的第二個示例進行配置,其中多個Subversion存儲庫可以共享相同的時刻。

這意味着要創建new_project,您需要登錄到Subversion服務器,並使用svnadmin create命令創建新的存儲庫。然後它會立即通過您的https://hostname/svn/repos/new_project網址提供。

如果更改提交到proj_a並增加對proj_b的最新版本,那麼所有的項目都在一個單一的Subversion版本庫,你應該能夠使用https://hostname/svn/repo作爲一個有效的Subversion目錄。試着做一結帳:

$ svn co --depth=immediates https://hostname/svn/repo 

--depth=immediates將只檢查了目錄,並通過所有的子目錄不會迭代。這樣,你有一個工作目錄,你可以使用:

$ svn co --depth=immediates https://hostname/svn/repo 
$ cd repo 
$ svn mkdir --parents new_project/trunk new_project/tags new_project/branches 
$ cd .. 
$ svn status 
A new_project/trunk 
A new_project/tags 
A new_project/branches 
$ svn commit -m "added new_project" 

看看是否有幫助。

0

問題是一個錯誤配置的Apache服務器。服務器配置就像

<DocumentRoot /path> 
... 
<Location /path/repo> 
    DAV svn 
    SVNPath /path/repo 
    ... 
</Location> 

,並作爲subversion FAQ指出文檔根目錄和倉庫路徑不應重疊。