我们能否在Subversion中将单个文件设置为外部文件?

32

在Subversion中,我们可以将一个单独的文件设置为外部文件吗?

4个回答

24

是的,使用 svn 1.6 可以实现。在svn书的夜间版本中有详细说明

但是即使文件外部元素正在工作,你仍应该只对文本文件这样做(目前如此),因为二进制文件无法正常工作作为文件外部元素。


4
二进制文件存在的问题已经解决。(http://subversion.tigris.org/issues/show_bug.cgi?id=3368) - sdu
5
仍需注意的是,外部文件只能从包含外部定义的文件夹所在的同一代码库中进行引用。 - Janosch
2
根据您提供的文档,Janosch是正确的。引用文档中的话:“文件外部无法引用其他存储库中的文件。”当我尝试在另一个存储库中使用外部文件时,错误消息进一步证实了这一点:'http://my.repo.server/src/external_repo/file1.html'不在存储库'http://my.repo.server/src/current_repo'中。您能否详细说明如何将其他存储库中的文件作为外部文件获取? - Peter
1
@Peter 刚刚试过了 1.8,仍然有限制。那么明确的解决办法是外部化一个目录,忽略其中的其他文件。 - gbjbaanb
1
有关这个的任何消息吗?是否有一个功能请求,我找不到它? - Janosch
显示剩余2条评论

5
正如第一个答案中所提到的,SVN外部定义在《SVN Book》的第3章中有详细说明,并且给出了很多语法示例。
此外,还有以下注意事项:
"由于svn:externals属性具有多行值,我们强烈建议您使用svn propedit而不是svn propset。"
在我的经验测试Tortoise SVN v1.9.6和svn.exe v1.9.5中,结果与文档描述一致。
- 将一个包含所有文件的外部文件夹引入可以工作。 - 从相同仓库中引入一个单个文件可以工作。 - 从不同仓库中引入单个文件会失败,这个限制在SVN书中有记录。
这导致了一个笨拙的解决方法。如果你控制两个仓库,你可以将单个文件克隆到源仓库中它自己的文件夹中(通过在仓库内使用单个文件的Externals),然后通过将它的整个文件夹带入目标仓库来跨越仓库边界进行Externals,该文件夹只包含单个文件。
使用Tortoise SVN客户端执行此操作的文档在tortoisesvn.net上。

4

我找不到一个好的示例来创建svn文件外部引用。因此,我在这里提供一个示例,以便于他人使用。

格式如下:

svn propset svn:externals "<local file> <remote svn file>" <local dir>

例如,以下命令:
svn propset svn:externals "my.cfg https://myserver/my/svn/location/my_sample_file.cfg.template" my_folder

将会在 my_folder 下创建文件 my.cfg,其内容来自于模板文件 https://myserver/my/svn/location/my_sample_file.cfg.template。这里假定你已经在svn中拥有了当前目录下的 my_folder 文件夹。


1
奇怪的是,SVN文档声称文件外部引用在不同仓库之间是不可能的。 - 0xC0000022L
Nikita Bosik的回答更好,因为它允许使用相对路径。 - gerardw

1
对于SVN 1.9.4,语法类似于文件夹的语法:
svn propset svn:externals <remote file> <local file>

例如,这将在当前目录中创建文件local.txt,并引用file.txt文件。
svn propset svn:externals ^/trunk/path/to/file.txt local.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接