请注意:Christian 是对的,但我建议至少尝试使用 GuestRepo 而不是Subrepo,它是作为对某些 subrepos 限制和缺点的答案而创建的。
顺便提一句:
外部因素不会给我们我们需要的行为
只是错误的答案,是不良研究的结果。您可以通过两种不同的方式使用 svn:externals,两种方式(通过一些手工操作)都会为您提供所需的结果
类似 Subrepo 的方式
GraphicsEngine 作为外部链接,在定义中具有固定修订。每次,当您必须并且必须在“SuperRepository”(带有外部的存储库)中使用更多新修订时,您必须更新外部定义并提交父项目。有了这样的硬链接,Superrepo 总是为父外部定义了一对修订。
时光倒流机中的免费链接,手动更新外部
如果您不想担心在场景 1 中监控外部更新(在单个外部更新定义的情况下可以通过钩子自动更新),您可以使用外部,链接到 GraphicsEngine 的 HEAD(不要在定义)用于手动(或通过某些脚本)更新目录的成本,其中包含外部数据。我懒得写了,所以——只写这里的工作流程
使用 HEAD-linking,对于过去主 repo 的修订版 N,externals 必须处于修订版 M 的状态,这是修订版 N 时链接 repo 的最新修订版。幸运的是,svn 可以使用日期规范(不同的形式) 作为 -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 {...}
可以轻松提取和存储基础修订的日期时间