SVN加载新的存储库

时间:2012-01-13 14:51:45

标签: svn visualsvn

我目前正在将一个repo从Linux迁移到windows。我遇到的问题是,在加载新存储库时,层次结构为[reponame]\[reponame]。有没有办法将所有文件夹上移一级?

更新

使用以下命令获取repo加载 svnadmin load [repo]> [repofile]使用.dump

1 个答案:

答案 0 :(得分:0)

Unix下的存储库层次结构是什么?你在那里使用http吗?

我不是百分百肯定你的意思。您是说存储库包含一个包含存储库名称的目录?或者,你是说当你结帐时,你现在做这样的事情:

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

结帐命令现在是什么样的?

当您说 repository 时,您是在谈论使用svnadmin create命令创建的单个存储库目录,还是在谈论单个存储库中的多个项目?

假设我正在使用svnserve来为我的存储库提供服务。我们将调用我的存储库myproj,并且我想在我的计算机softserve上提供我的存储库。当我想要结帐时,我这样做:

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

注意我只有我服务器的名称。该URL甚至不包含我的存储库的名称。那是因为svnserve只能提供单个存储库。如果我有多个存储库,我要么必须有单独的机器,要将所有存储库合并到一个存储库中,要么使用不同的端口。

Apache可以为多个存储库提供服务,但每个存储库都需要一个虚拟Web目录才能访问,因此Apache知道它何时看到它是一个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 Server并查看了它。 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>

因此,如果您将foo存储库放在C:\Repositories下,则结帐如下:

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

我没有使用VisualSVN Server来查看我是否可以从前端更改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

但是,我不知道Visual SVN将如何处理它。我怀疑你最好的办法就是将你的Apache虚拟目录名称改回默认的svn或将其更改为sourcesrc