很抱歉这个多部分的问题,但我很难理解将 Mercurial Patch Queue 与 BitBucket 一起使用的预期方法,而 Google 并没有多大帮助。我希望描述一些 MQ 概念的一个答案将同时涵盖许多问题。我已阅读http://ches.nausicaamedia.com/articles/technogeekery/using-mercurial-queues-and-bitbucket-org,但它似乎已过时且不完整。我的总体计划是允许大量用户提交大量更改,而不必将它们提交到分支。这些补丁代表玩家对游戏进行的可选修改,以增强和扩展游戏。我希望用户能够挑选任意补丁或一组补丁来玩和查看。当我对 hg 的工作原理有了深入的了解后,我打算编写一些 PHP 脚本或一些东西来将一个分支和一组选定的补丁程序拉到一个工作区中,以便玩家能够运行 HTML5 代码进行审查。
我已经能够:
- 在 SourceForge http://sourceforge.net/p/iotabuildit/wiki/Home上创建一个存储库,我最初认为我会在其中托管所有内容。
- 将我的所有代码提交到 SourceForge 存储库。
- 考虑到我的要求,意识到 BitBucket 可能是一个更好的地方来托管这个(感谢推荐的 DVCS 托管许多独立补丁的机制)。
- 将我的代码直接从 SourceForge 的 Mercurial 存储库导入 BitBucket http://bitbucket.org/bluemonkmn/iotabuildit/
- 将 BitBucket URI 添加到 TortoiseHg,这样我就可以将同一个本地存储库与任一在线存储库一起使用。
- 在 TortoiseHg 中启用 mq
- Q将更改提交到我的本地存储库的补丁队列中。
- 在 BitBucket http://bitbucket.org/bluemonkmn/iotabuilditmq/上创建一个补丁队列存储库。
- 将补丁队列存储库克隆到本地存储库
- 将补丁文件从原始本地存储库复制到补丁队列存储库(尽管我想知道是否有更好的方法来做到这一点)。
- 在进行推送之前,通过打开 --mq 开关将补丁推送到 BitBucket 补丁队列存储库。
- 请参阅 BitBucket 中列出的补丁程序。
- 克隆 BitBucket 补丁队列存储库的新副本并查看本地存储库中可用的补丁(以及树的其余部分)。
我无法弄清楚或有疑问的事情是:
- 我是否需要在本地同时保留主存储库和补丁存储库?
- 我可以/应该将补丁存储库与 SourceForge 一起使用吗?(如果可以,我可能会放弃 BitBucket。)
- SourceForge 是否支持 mq?(SourceForge 会不会像我在 BitBucket 上看到的那样给我一个包含补丁的克隆存储库?)
- 我可以/应该将原始存储库与 BitBucket 补丁存储库一起使用吗?(如果可以,我可能会放弃 SourceForge 的存储库。)
- 在处理用于补丁的代码时是否需要使用一个存储库,而在处理打算正式提交的代码时是否需要使用另一个存储库?
- 将补丁推送到在线存储库
的最佳方式是什么?
- 我是否在本地补丁存储库上执行 QCommit 或 QNew,然后使用 --mq 开关推送?
- 在我的过程中的某个时刻,我向补丁存储库提交了一个系列和一个 .diff 文件,这似乎有点不对劲。这是否玷污了我对 mq 和 BitBucket 应该如何工作的看法?
- 我是否应该将 .diff 文件提交到 BitBucket 或 SourceForge 上的源代码控制?(在某些情况下,QCommit 似乎想要提交 .hgignore、series 和 .diff 文件)
- 克隆后,用户是否应该能够在补丁存储库中看到挂起的已应用和/或未应用的补丁?
- 有没有办法在本地或远程存储库中提取可用补丁而不克隆它?
- 一旦我在本地存储库中删除了一个补丁,我就无法弄清楚如何在不重新克隆它的情况下从远程存储库取回它,我也无法弄清楚如何提交对补丁的删除。
- 如果不手动复制补丁文件,我无法将补丁从我的原始存储库传输到补丁存储库。
- 我是否很快就会遇到一个问题,即我无法从队列中挑选出一些补丁,而在同一个队列中没有其他补丁之前?我担心有些玩家会忽略在单独的分支/队列/任何东西上制作补丁,这将使它们与来自同一(甚至可能是另一个)用户的不相关更改保持一致。处理该潜在问题的任何建议也值得赞赏。
- 是否可以(允许)任意用户提交补丁,而无需显式添加每个 BitBucket 用户以拥有补丁存储库的权限?
- 让所有(可能是数百个?)用户共享补丁队列存储库是否明智和合理?这将是理想的(而不是让每个用户创建自己的补丁存储库,如果这甚至可能的话),因为我不希望这对用户来说很复杂,并且考虑到我在理解 Mercurial 和 BitBucket 方面所花费的时间,我担心任何并发症都会关闭很多用户/玩家。
你可能会说,我有点迷茫,不知道要问什么问题。我怀疑答案比这些问题更简单,但在不知道问题的情况下,很难提出正确的问题。希望描述补丁队列存储库性质的一个答案将为我清除所有这些。