在不提交到顶级存储库的情况下模仿外部属性



我有一个"引擎";存储库布局如下

/Engine
/Modules

和"game"希望与引擎布局交错的存储库,如:

/Engine
/Modules
/Game

我正在想办法把事情安排好,这样

  1. 上面解释的文件夹结构被正确设置为两个存储库的超集。
  2. 引擎存储库没有任何指向游戏存储库的引用。
  3. 游戏存储库包含所有关于外部的元信息。

SVN外部确实不想做我正在尝试做的事情。让外部引擎存储库指向游戏存储库中的Game文件夹的明显修复要求我将外部模式提交到引擎存储库,这是我不想做的。

我可以在游戏存储库中创建几十个独立的外部元素到引擎存储库中的/Engine和/Modules子文件夹中,手动重新创建引擎存储库的顶层结构。这可以工作,但它真的很乱,不会自动拾取任何添加到引擎存储库的新文件夹(我不希望有很多,但仍然)。

我可以考虑其他的选择吗?我不期望有任何支持良好的选项,但我愿意有点黑客。

你真的必须在两个可能的解决方案中选择一个:

  • 带着它的工具、方法等进入真正的纯配置管理世界(svn:外部只是在某种程度上模仿CM)
  • 仍然使用SVN外部,但不在"明显修复"中;

我不能推荐The Definitive Tool (tm)对于CM(无论如何,这将是离题的),但是带有外部的svn样式的,这对您来说是可用的,将包括(TBT!)(我没有SVN,现在也不用)

  1. 空(没有自己的内容)"wrap "库
  2. 外部在wrapper-repository的根,其中包含所有引用使用的引擎和游戏库(游戏,嵌套到引擎树中,是我的主要问题和可能的问题,需要额外的研究,而,根据甚至稍微过时的SVN书,它可以做到)

如果使用书中的定义示例

$ svn propget svn:externals calc
third-party/sounds             http://svn.example.com/repos/sounds
third-party/skins -r148        http://svn.example.com/skinproj
third-party/skins/toolkit -r21 http://svn.example.com/skin-maker

作为基础(注意third-party/skins之后third-party/skins/toolkit的定义:您的嵌套外部情况),并且给定您的存储库结构,我建议定义如下

. /URL-OF-ENGINE-REPO
/engine/modules/game /URL-OF-GAME-REPO

在这种情况下,独立的Game repo没有存储任何与Engine repo自动和req的关系的信息。3似乎失败了,但是:

  • 您总是可以手动在wrapper-repo的根目录中使用svn propget svn:externals获取这些数据或
  • 使用wrapper-repo的post-commit(?)钩子获取这些数据的更新,将其存储在游戏repo的WC中被忽略的文件中,或者甚至可以作为自定义svn属性(存储在repo中,不仅在WC中,有版本,但需要额外的"技术")。在游戏仓库中提交,当外包装更改到达游戏仓库时)