Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何直接签出SVN外部URL?_Svn_Svn Externals - Fatal编程技术网

如何直接签出SVN外部URL?

如何直接签出SVN外部URL?,svn,svn-externals,Svn,Svn Externals,我有一个Subversion存储库,其中包含一些客户端文件。一些客户端将使用标准文件,但其他客户端将提供文件的自定义版本。为了适应这种情况,我为将使用共享文件的客户端使用了svn:externals。所以我们的结构是这样的: svn |+ top |+ shared |+ clients |+ custom1 |+ custom2 |+ shared1 |+ shared2 客户端“custom1”是Subversion中包含该客户端

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

svn
|+ top
   |+ shared
   |+ clients
      |+ custom1
      |+ custom2
      |+ shared1
      |+ shared2
客户端“custom1”是Subversion中包含该客户端自定义文件的真实文件夹,客户端“shared1”是
/clients
文件夹上的svn:external属性,指向
/top/shared

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

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

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

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

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

http://svn/top/clients/shared1
不是SVN中的物理路径,只是对外部路径的引用。所以,这就是你不能直接查看的原因

要解决此问题,您可以创建
http://svn/top/clients/shared1
作为SVN中的空文件夹,您可以在
http://svn/top/clients/shared1
文件夹指向
/top/shared
,而不是
/clients
文件夹


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

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

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

findstr
将获得我要查找的属性的单行,而
sed
命令将解析出目标url(空格前的部分)。

这将创建一个额外的文件夹层,它不能提供我要查找的内容,但已经足够近了。
svn propget svn:externals http://svn/top/clients/ | findstr "\<shared1\>" | sed "s/\(.*\)\s\(shared1\)/\1/"