【发布时间】:2011-06-09 03:26:06
【问题描述】:
因新见解而更新:五年后看到这个问题,我意识到这源于尝试使用版本控制系统作为包管理器。这当然会导致各种意想不到的问题,我们不应该那样使用它。如果您正在阅读此问题,我建议您搜索适合您首选语言的包管理器。
我最初的问题:我目前正在从 Subversion 迁移到 Mercurial,我不得不说我不后悔这个决定。但是,在尝试转换我的项目时,我遇到了 Mercurial 问题,我似乎无法修复。我有两个不同的项目:一个是框架,另一个是依赖于该框架的应用程序。以下是存储库的样子:
框架存储库:
- 文档/
- 部署/
- lib/
- 测试/
应用程序存储库:
- 申请/
- 配置/
- lib/
- 测试/
- www/
我希望应用程序的 lib 目录包含框架的 lib/ 目录的副本。我曾经使用 svn:externals 来做到这一点。现在,我知道 Mercurial 支持 concept of subrepositories,但这似乎不是“正确”的解决方案,因为它实际上并没有像我想要的那样拉入 lib/ 目录,因为你仍然必须拉并手动推送更改。此外,一旦您克隆了框架存储库,您将获得它的全部,而不仅仅是 lib/ 目录。我只需要 lib/ 目录,不需要测试或文档。
现在,我想出了两种不同的解决方案来解决这个问题,但我想知道哪个是最好的。第一个解决方案是将框架完全克隆到不同的目录中,并在应用程序的 lib/ 目录中创建指向框架的 lib/ 目录的符号链接。我认为将符号链接放入 .hgignore 应该确保一切正常?这意味着您可以编辑框架代码并提交它,您也可以编辑应用程序的代码并提交它。
另一种选择是拥有多个存储库。框架作为一个整体被拉出,这意味着您将获得 docs/、deploy/、test/ 等目录,这些目录对于框架的使用 来说是不需要的。我想也许纯粹为库创建一个存储库可能是一个解决方案,尽管我真诚地怀疑它,因为单元测试非常依赖于库本身。
有人知道这个问题的合适解决方案吗?
【问题讨论】:
标签: mercurial repository