为什么“svn mkdir URL”不起作用,同一个URL上的“svn import ... URL”工作正常?

时间:2012-04-04 10:07:30

标签: svn

我在

设置了一个svn存储库
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命令错误,因为ÁlvaroG。Vicario注意到his reply

更新看起来this entry in the FAQ可能相关(通过serverfault

3 个答案:

答案 0 :(得分:1)

问题可能在于如何使用Apache设置Subversion 存储库 (是的,您可以拥有多个存储库)。

使用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个左右的存储库,那么您将拥有一个很难维护的非常长的配置文件。

为了解决这个问题,Apache允许您在一个配置中配置一大堆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美元问题):如果您提交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"

看看是否有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

问题是配置错误的apache服务器。服务器配置就像

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

并且subversion FAQ指出文档根目录,而存储库路径不应重叠。