0

我有一个 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. 如果不是之前创建新项目文件夹并稍后添加文件,我右键单击new_projectEclipse 中的文件夹并“共享项目”一切正常。在 Eclipse 中共享项目应该相当于做

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

在命令行上,对吗?什么是我不明白的?存储库有什么问题?

编辑上面的mkdir命令是错误的,因为 Álvaro G. Vicario 在他的回复中注意到

更新看起来FAQ中的这个条目可能是相关的(通过serverfault

4

3 回答 3

1

问题可能是您的 Subversion存储库(是的,您可能有多个存储库)是如何使用 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/repos和访问这些存储库http://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_aand /path/to/all/svn_repositories/proj_b,您可以通过http://myserver/svn/repo/proj_aand访问它们http://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_projectURL 立即可用。

如果提交更改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"

看看是否有帮助。

于 2012-04-04T16:11:37.530 回答
0

The problem was a mis-configured apache server. Server configuration was like

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

and as the subversion FAQ points out the document root and the repository path should not overlap.

于 2012-04-05T12:40:06.823 回答
0
             svn mkdir https://hostname/svn/     new_project
svn import new_project https://hostname/svn/repo/new_project/trunk
                                            ^^^^
于 2012-04-04T10:24:13.337 回答