【问题标题】:Mercurial repository narrow clone?Mercurial存储库窄克隆?
【发布时间】: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


【解决方案1】:

如果您只需要引用这些库,则应该将这些库分离到一个单独的存储库中。

如果你真的只需要参考那个。除了“感觉不对”之外,引用包含 lib 目录 + 其他内容的存储库有什么问题?

至于“仍然必须手动拉取和推送”,当您拉取主克隆时,它也会拉取子存储库,但不会将它们更新到较新的版本,这是一件好事,您需要手动完成,就像使用 Subversion 一样。

【讨论】:

  • 嗯,那个。将单元测试放在生产环境中感觉不对:它应该能够没有这些。我将把 lib 分离到它自己的存储库中,所以我可以这样做,谢谢你的回答。
  • 通常这是通过部署脚本处理的
【解决方案2】:

您应该将单独的组件放在它们自己的存储库中。然后,当您创建应用程序时,您可以使用convert extension 来创建一个与普通框架不同的pulabale 框架存储库:

$ hg convert --filemap map.txt framework new-framework

map.txt 包含重命名/包含/排除(以下应该只包含 lib 目录并将其中的所有内容移动到存储库根目录):

include lib
rename lib .

您现在可以从应用程序仓库中提取框架仓库(第一次使用-f,因为这些仓库之间可能没有任何关系)。

$ cd project
$ hg pull -f ../new-framwork
$ hg merge

现在,当开发继续时,您只需在每次拉取之前重新创建转换后的 repo,就可以开始了。实际上,我们的框架存储库中有一个hook,它会在每个变更组(= 每次推送)上重新创建转换后的存储库。

这样,您可以在各自的存储库中拥有两个工作区(应用程序和框架),而应用程序存储库包含完整的框架历史记录,并且只需从转换后的存储库中提取即可进行更新。

【讨论】:

  • 所以,普遍的共识似乎是:拆分。我不知道转换扩展名,所以我得再研究一下。我是否正确理解使用上述方法意味着您实际上将框架与应用程序本身合并,还是我错过了什么?
  • 没错,您将框架合并到应用程序中。由于它们位于不同的目录中,因此这种合并可以自动完成且无冲突。
猜你喜欢
  • 2011-11-16
  • 2012-02-05
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2018-05-21
  • 2010-10-23
相关资源
最近更新 更多