在BitBucket上使用Mercurial补丁队列存储库,用于许多用户和补丁

时间:2012-04-15 18:09:24

标签: mercurial tortoisehg bitbucket

对于很多部分的问题感到抱歉,但我很难理解使用BitBucket的Mercurial Patch Queue的预期方法,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可能是举办此活动的更好地方(感谢Recommended DVCS mechanism for hosting many independent patches)。
  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补丁队列存储库的新副本,并查看本地存储库中可用的补丁(以及树的其余部分)。
  14. 无法弄清楚或有疑问的事情是:

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

3 个答案:

答案 0 :(得分:1)

回顾我以前的问题,我认为我对DVCS的理解因我对CVCS的熟悉而过于模糊。最后,我只是允许其他SourceForge用户托管他们自己的存储库克隆并发布指向其存储库的链接(参见http://sourceforge.net/p/iotabuildit/wiki/reviews/)。

答案 1 :(得分:0)

我想我找到了关于问题#3的第二个问题的答案:

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

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

答案 2 :(得分:0)

我很害怕,你带着SF堆克隆,你走的是“远离理想”的道路,走向“无管理的混乱”里程碑

  • Yon可以使用带有Bitbucket的MQ队列(请参阅mercurial-crew-mq repo或hgsubversion-layout-hacks repo),无需额外的回购,只有.hg内的dir用于补丁
  • 我看不出有任何理由在自己的仓库中存储补丁(变更集几乎不可读 - 差异差异,补丁历史值接近零值)
  • 在一个仓库中使用补丁,您可以轻松交换和更新补丁
  • qclone | push --mq提供基于vanilla代码的补丁的双向交换
  • 可以为MQCollab扩展
  • 提供围绕某些修补程序的群组工作和P2P通信