svn:externals用于替换子目录

3
我在我的subversion仓库中有一个目录,我想用外部仓库的内容替换它。因此,在我的仓库中,路径为/toplevel/sites/foo。我希望从外部仓库拉取foo。我通过在/toplevel/sites上添加"foo http://other-repository.com/path/to/foo"到svn:externals中实现了这一点。但是,这使得直接checkout /toplevel/sites/foo成为不可能。您必须检出/toplevel/sites并让foo递归地被拉入其中。/toplevel/sites中有大量的东西,因此这是次优的,并且我们经常有工人只处理/toplevel/sites中的一件事情。
我的第二个尝试是在toplevel/sites/foo中创建一个空目录,并直接将svn:externals属性添加到foo中。这样可以让你checkout /toplevel/sites/foo,但最终会将外部内容放在里面,因此生成的路径是/toplevel/sites/foo/foo。我只想要一个foo。
如何设置才能只拉取/toplevel/sites/foo而不拉取其他任何东西?

编辑:我通过创建一个空的 foo 目录,将远程仓库中所有顶级目录添加到 foo 的 svn:externals 中,使其工作。虽然有点丑陋,但幸运的是顶级实体并不多。如果可能,我仍希望找到一种不需要这样做的方法。

2个回答

0

嗯,实际上只需在某个地方检查http://other-repository.com/path/to/foo即可吗?我不知道其他方法。如果您需要它放在正确的位置,当然可以将其移动到先前使用svn co --depth=empty检出的sites目录中。


我想我没有表达清楚。我希望“svn co http://myrepository.com/toplevel/sites/foo”能够工作,通过拉取http://other-repository.com/path/to/foo。但它并没有。它说http://myrepository.com/toplevel/sites/foo不存在。 - jsd
我知道你想要什么,但不能用其他方式/直接完成。外部不是别名或类似的东西,而是在客户端处理,而不是在服务器端处理。也许有人已经编写了自定义的服务器端代码,但我怀疑这一点。就svn服务器而言,你的“foo”目录不存在,只有客户端读取目录属性并发现外部引用。 - Wrikken

0

您确实可以使用svn:externals来检出多个不同的目录,甚至是完全不同的存储库。

根据svn书(http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html);

Subversion提供了对外部定义的支持。外部定义是将本地目录映射到版本化目录的URL - 最好是特定版本。在Subversion中,您可以使用svn:externals属性以组的形式声明外部定义。您可以使用svn propset或svn propedit(请参阅“操作属性”一节)创建或修改此属性。它可以设置在任何版本化目录上,其值描述外部存储库位置和应将该位置检出到的客户端侧目录。

svn:externals属性的便利之处在于,一旦在版本化目录上设置了它,检出具有该目录的工作副本的每个人都会获得外部定义的好处。换句话说,一旦有人努力定义了嵌套的工作副本结构,其他人就不必费心了 - 在检出原始工作副本后,Subversion还会自动检出外部工作副本。


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