2

我有一个包含一些客户端文件的 Subversion 存储库。一些客户端将使用标准文件,但其他客户端将提供文件的自定义版本。为了适应这一点,我为将使用共享文件的客户端使用了 svn:externals。所以我们的结构是这样的:

svn
|+ top
   |+ shared
   |+ clients
      |+ custom1
      |+ custom2
      |+ shared1
      |+ shared2

客户端“custom1”是 Subversion 中包含该客户端自定义文件的真实文件夹,客户端“shared1”是/clients指向/top/shared.

我希望的是,当我想部署一个新客户端时,我可以简单地将他们的文件夹导出到服务器,使用如下命令:

svn export http://svn/top/clients/custom1 \\server\custom1

或者

svn export http://svn/top/clients/shared1 \\server\shared1

这对于自定义客户端来说很好,因为它们在 Svn 中有一个“真实”文件夹,但是对于配置了外部的客户端,我得到一个错误:

svn: E170000: URL 'http://svn/top/clients/shared1' doesn't exist

有没有办法可以直接签出/导出“外部”文件夹?

4

2 回答 2

2

我最终做的是使用svn ls来查看我是否正在访问物理目录。如果它不存在,则使用以下命令获取我的外部目标:

svn propget svn:externals http://svn/top/clients/ | findstr "\<shared1\>" | sed "s/\(.*\)\s\(shared1\)/\1/"

findstr将获得我正在寻找的属性的单行,并且该sed命令将解析出目标 url(空格之前的部分)。

于 2013-02-15T20:32:15.810 回答
1

http://svn/top/clients/shared1不是 SVN 中的物理路径,而只是对外部的引用。因此,这就是您无法直接检查的原因。

要摆脱这种情况,您可以http://svn/top/clients/shared1在 SVN 中创建一个空文件夹,并且可以在该http://svn/top/clients/shared1文件夹上赋予 svn:external 属性以使其指向/top/shared而不是/clients文件夹。

然后您的签出将获得一个物理路径来签出,但您无需将实际内容保存在此文件夹下。

于 2013-02-13T19:33:51.640 回答