Mercurial,是否可以将更改存储到代码库而不是整个代码库本身?

时间:2014-01-11 14:11:16

标签: version-control mercurial

我的应用程序依赖于超过500兆的大型第三方库。我得到这个库的源代码作为一个zip文件,每年发布几次。我需要能够对这个代码库进行更改,我希望在Mercurial存储库中维护这些更改,但我真的不想将500 Meg代码库推送到远程存储库。首先上传它需要很长时间,它将占用我在远程服务器上的大部分空间限额,并且需要很长时间才能获得新的副本。

所以我想知道的是:有没有办法在远程存储库中存储对代码库所做的更改而不是推送整个代码库本身?因此,创建新构建将包括从文件服务器下载的zip可再发行组件安装原始代码库,将原始代码库初始化为Mercurial存储库,然后从远程存储库中提取对该代码库所做的更改。

或者是否有完全不同的方法来实现同样的目标?

1 个答案:

答案 0 :(得分:1)

Mercurial Queues(MQ)是一种处理第三方代码更改的建议方法。您可以将MQ补丁存储在单独的存储库中。

这是一个例子。假设我们有第三方somelib.zip。我们第一次:

  1. 提取它。
  2. 初始存储库:hg inithg ci -A -m 'init'
  3. 启用MQ扩展。
  4. Init MQ:hg qinit --create-repo
  5. 哈克。
  6. 创建补丁:hg qnew first-patch
  7. 提交修补程序存储库:hg ci --mq -m 'Create first patch'
  8. 当发布新版本的somelib.zip时,您可以使用hg qpop -a取消应用所有修补程序,抓住它并使用hg qpush -a再次应用所有修补程序。

    假设现在我们想在另一台机器上安装somelib.zip。然后我们重复步骤1-3和下一步:

    1. 克隆MQ存储库:`hg clone ./。hg / patches
    2. 使用hg qpush -a
    3. 应用所有修补程序

      关键功能是您拥有与修补程序存储库一起使用的所有Mercurial功能。许多命令都有选项--mq,可以将它们切换为与MQ存储库一起使用。例如,您可以使用hg push --mq推送提交。

      以下是录制的演示:http://asciinema.org/a/7245