3

很抱歉这个多部分的问题,但我很难理解将 Mercurial Patch Queue 与 BitBucket 一起使用的预期方法,而 Google 并没有多大帮助。我希望描述一些 MQ 概念的一个答案将同时涵盖许多问题。我已阅读http://ches.nausicaamedia.com/articles/technogeekery/using-mercurial-queues-and-bitbucket-org,但它似乎已过时且不完整。我的总体计划是允许大量用户提交大量更改,而不必将它们提交到分支。这些补丁代表玩家对游戏进行的可选修改,以增强和扩展游戏。我希望用户能够挑选任意补丁或一组补丁来玩和查看。当我对 hg 的工作原理有了深入的了解后,我打算编写一些 PHP 脚本或一些东西来将一个分支和一组选定的补丁程序拉到一个工作区中,以便玩家能够运行 HTML5 代码进行审查。

已经能够:

  1. 在 SourceForge http://sourceforge.net/p/iotabuildit/wiki/Home上创建一个存储库,我最初认为我会在其中托管所有内容。
  2. 将我的所有代码提交到 SourceForge 存储库。
  3. 考虑到我的要求,意识到 BitBucket 可能是一个更好的地方来托管这个(感谢推荐的 DVCS 托管许多独立补丁的机制)。
  4. 将我的代码直接从 SourceForge 的 Mercurial 存储库导入 BitBucket http://bitbucket.org/bluemonkmn/iotabuildit/
  5. 将 BitBucket URI 添加到 TortoiseHg,这样我就可以将同一个本地存储库与任一在线存储库一起使用。
  6. 在 TortoiseHg 中启用 mq
  7. Q将更改提交到我的本地存储库的补丁队列中。
  8. 在 BitBucket http://bitbucket.org/bluemonkmn/iotabuilditmq/上创建一个补丁队列存储库。
  9. 将补丁队列存储库克隆到本地存储库
  10. 将补丁文件从原始本地存储库复制到补丁队列存储库(尽管我想知道是否有更好的方法来做到这一点)。
  11. 在进行推送之前,通过打开 --mq 开关将补丁推送到 BitBucket 补丁队列存储库。
  12. 请参阅 BitBucket 中列出的补丁程序。
  13. 克隆 BitBucket 补丁队列存储库的新副本并查看本地存储库中可用的补丁(以及树的其余部分)。

无法弄清楚或有疑问的事情是:

  1. 我是否需要在本地同时保留主存储库和补丁存储库?
    • 我可以/应该将补丁存储库与 SourceForge 一起使用吗?(如果可以,我可能会放弃 BitBucket。)
    • SourceForge 是否支持 mq?(SourceForge 会不会像我在 BitBucket 上看到的那样给我一个包含补丁的克隆存储库?)
    • 我可以/应该将原始存储库与 BitBucket 补丁存储库一起使用吗?(如果可以,我可能会放弃 SourceForge 的存储库。)
    • 在处理用于补丁的代码时是否需要使用一个存储库,而在处理打算正式提交的代码时是否需要使用另一个存储库?
  2. 将补丁推送到在线存储库 的最佳方式是什么?
    • 我是否在本地补丁存储库上执行 QCommit 或 QNew,然后使用 --mq 开关推送?
    • 在我的过程中的某个时刻,我向补丁存储库提交了一个系列和一个 .diff 文件,这似乎有点不对劲。这是否玷污了我对 mq 和 BitBucket 应该如何工作的看法?
    • 我是否应该将 .diff 文件提交到 BitBucket 或 SourceForge 上的源代码控制?(在某些情况下,QCommit 似乎想要提交 .hgignore、series 和 .diff 文件)
    • 克隆后,用户是否应该能够在补丁存储库中看到挂起的已应用和/或未应用的补丁?
  3. 有没有办法在本地远程存储库中提取可用补丁而不克隆它?
    • 一旦我在本地存储库中删除了一个补丁,我就无法弄清楚如何在不重新克隆它的情况下从远程存储库取回它,我也无法弄清楚如何提交对补丁的删除。
    • 如果不手动复制补丁文件,我无法将补丁从我的原始存储库传输到补丁存储库。
  4. 我是否很快就会遇到一个问题,即我无法从队列中挑选出一些补丁,而在同一个队列中没有其他补丁之前?我担心有些玩家会忽略在单独的分支/队列/任何东西上制作补丁,这将使它们与来自同一(甚至可能是另一个)用户的不相关更改保持一致。处理该潜在问题的任何建议也值得赞赏。
  5. 是否可以(允许)任意用户提交补丁,而无需显式添加每个 BitBucket 用户以拥有补丁存储库的权限?
  6. 让所有(可能是数百个?)用户共享补丁队列存储库是否明智和合理?这将是理想的(而不是让每个用户创建自己的补丁存储库,如果这甚至可能的话),因为我不希望这对用户来说很复杂,并且考虑到我在理解 Mercurial 和 BitBucket 方面所花费的时间,我担心任何并发症都会关闭很多用户/玩家。

你可能会说,我有点迷茫,不知道要问什么问题。我怀疑答案比这些问题更简单,但在不知道问题的情况下,很难提出正确的问题。希望描述补丁队列存储库性质的一个答案将为我清除所有这些。

4

3 回答 3

1

回顾我的旧问题,我认为我对 DVCS 的理解被我对 CVCS 的熟悉程度所掩盖。最后,我只是允许其他 SourceForge 用户托管他们自己的存储库克隆并发布到他们的存储库的链接(请参阅http://sourceforge.net/p/iotabuildit/wiki/reviews/)。

于 2012-12-30T13:30:55.687 回答
0

恐怕,随着 SF 的一堆克隆,你走上了“远非理想”的道路,走向了“无人管理的混乱”里程碑

  • Yon 可以将 MQ-queues 与 Bitbucket 一起使用(请参阅mercurial-crew-mq repo 或hgsubversion-layout-hacks repo),无需额外的 repo,仅在 dir 中.hg用于补丁
  • 我看不出有任何理由将补丁存储在自己的仓库中(变更集几乎不可读 - 差异的差异,补丁历史的价值接近于零)
  • 通过一个存储库中的补丁,您可以轻松交换和更新补丁
  • qclone | push --mq在 vanilla 代码之上提供补丁的双向交换
  • MQCollab扩展可以为贡献者提供围绕一些补丁的小组工作和 P2P 通信
于 2012-12-30T17:17:29.800 回答
0

我想我找到了问题 #3 的第二个项目符号的答案:

  1. 确保补丁位于源(本地)存储库的已应用队列中。
  2. 现在我可以从 TortoiseHg Workbench 的“导出”上下文菜单中选择“复制补丁”。
  3. 然后我可以切换到另一个本地存储库并从“存储库”菜单中选择“导入...”。
  4. 点击“从剪贴板导入”
  5. 在可应用补丁的目标下拉列表中,选择“补丁”。
  6. 点击导入

现在来自其他本地存储库的补丁出现(未应用)在本地存储库中,并且可以轻松应用。

除非我自己找到所有其他问题的答案,否则我可能不会接受这个(我自己的)答案。我希望有人可以帮助我解决其他问题。

于 2012-04-15T23:12:41.100 回答