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