我目前正在将一个repo从Linux迁移到windows。我遇到的问题是,在加载新存储库时,层次结构为[reponame]\[reponame]
。有没有办法将所有文件夹上移一级?
更新
使用以下命令获取repo加载 svnadmin load [repo]> [repofile]使用.dump
答案 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
或将其更改为source
或src
。