请注意:Christian 是对的,但我建议至少尝试使用 GuestRepo,而不是 Subrepo,它是针对某些 subrepos 限制和缺点而创建的。
顺便说一句:
外部不会给我们我们需要的行为
只是错误的答案,是不良研究的结果。您可以通过两种不同的方式使用 svn:externals,两种方式(通过一些手工操作)都会为您提供所需的结果
类似Subrepo的方式
GraphicsEngine 作为外部链接,定义为 fixed revision。每次,当您必须并且必须在“SuperRepository”(带有外部的存储库)中使用更多新修订时,您必须更新外部定义并提交父项目。有了这样的硬链接,Superrepo 总是为父外部定义了一对修订。
免费链接,时光倒流机中手动更新外链
如果您不想担心在场景 1 中监视外部更新(在 singe externals 的情况下,可以使用钩子自动更新定义),您可以使用外部链接到GraphicsEngine 的 HEAD(不要在定义中使用修订版)用于手动(或通过某些脚本)更新包含外部数据的目录的成本。懒得写了,所以-这里只写工作流
使用 HEAD-linking,对于过去主 repo 的修订版 N,externals 必须处于修订版 M 的状态,这是修订版 N 时链接 repo 的最新修订版。幸运的是,svn 可以使用 date-specifications (不同形式)作为 -r 选项的参数。您只需要确定提交 N 的日期时间并更新外部目录(获取“混合修订工作副本”)
svn log -q -r N 在主仓库中会给出类似的东西
------------------------------------------------------------------------
r34 | lazybadger | 2012-03-24 12:28:12 +0600 (Сб, 24 мар 2012)
------------------------------------------------------------------------
暂时只记得日期字段“2012-03-24 12:28:12 +0600”。
svn help up 确认,我们可以使用日期作为修订说明符
-r [--revision] ARG : ARG (some commands also take ARG1:ARG2 range)
A revision argument can be one of:
...
'{' DATE '}'
...
在SVN-Book,“修订日期”一章中,我们将为我们的 (date-time-TZ) 案例找到正确的格式
...
$ svn checkout -r {"2006-02-17 15:30 +0230"}
...
$ svn checkout -r {2006-02-17T15:30-04:00}
...
$ svn checkout -r {20060217T1530-0500}
第一种格式对我们来说是最好的选择(因为我们已经从 svn 日志中获得了它),因此 - 我们可以在 WC 中使用外部(仍然不与主版本同步)
cd EXTERNAL-DIR
svn up -r {"2012-03-24 12:28:12 +0600"}
并以与过去相同的状态进入外部,当时主要修订版(在我的示例中)为 34
PS:svn log ...| gawk {...} 可以轻松提取和存储基础修订的日期时间