带有“命名提交”的分布式版本控制系统(DVCS)

4
我正在寻找一种分布式版本控制系统(DVCS),它能让我使用类似于“命名提交”的功能,类似于补丁队列实现的功能,但不完全相同...(我只会与和比较,因为我不知道其他类似的工具)
补丁队列很接近,但我想要这些功能:
  • 在存储库中创建新分支,分支也是补丁系列。(mq使用全局补丁队列,git在分支时失去了stg信息,并且当前应用了补丁的分支)
  • 能够列出“命名提交”,像打补丁一样弹出和推送它们。(两者都可以做到)
  • 将“命名提交”更改与普通提交绑定-因此当我在rev 1处创建补丁时,在rev 3处更改补丁时,我仍然可以检出rev 1并查看旧版本。(mq再次是全局的,当我回到旧版本时,stg失败了,显示“不在任何分支上”)
  • 与上面相同-能够以某种方式标记修订版,以便如果我检出它,我会得到当时的“命名提交”。
是否有类似的工具?有没有对某些DVCS的扩展?或者也许有一种方法可以使mq或stg按照我想要的方式工作?有什么建议吗?
貌似保留其信息的mq与其他文件在同一个存储库中,这可能接近我需要的功能,但这是否可能呢?
只是简单地解释一下目的:我希望始终保留应用的补丁,但它们不是“开发的一部分”。我只想在主存储库的我的自己的分支中单独保存几个特定的功能。

这是您要找的吗?http://mercurial.selenic.com/wiki/Tag - msw
我可以使用标签,但我必须以某种特定的方式对它们进行命名。如果创建2个“特殊标签”,然后在该分支中分支并删除第一个(也是唯一的)带标记的提交 - 我怎样才能轻松地知道哪些补丁现在被应用,哪些没有?虽然,我会尝试是否可以在Mercurial中以某种方式编写脚本...如果可以无缝完成,那将是一个非常好的解决方案!感谢这个想法。 - viraptor
我最近开始在Mercurial中为我开发的每个功能使用命名分支,在完成后进行合并。只有错别字和热修补才会直接在默认分支上处理。作为另一种轻量级解决方案,您也可以使用标签。 - tux21b
就像将存储库控制信息放在版本控制系统下(例如 hg add .hgignore)有很好的理由一样,将 my_tag_info_metadata.{csv,json} 放在版本控制系统下可能是一个好主意,也可能是一个糟糕的主意;我还没有确定。 - msw
我有点困惑,不明白为什么你想要将个人分支保留在补丁队列格式中。创建一个额外的分支或两个分支,根据需要在主分支上进行变基不就可以了吗? - Zed
@Zed - 一些本地补丁可能会应用于许多分支,然后可能会被上游接受,但在稍微重写后。保持它们明确和命名将使合并更容易-当时机到来时,我知道要删除哪个补丁(例如按问题名称)。 - viraptor
1个回答

1

你可以使用Mercurial中的mq在其自己的repo中完成此操作。大多数命令都有一个--mq标志,将操作补丁队列。要开始使用,请使用hg init --mqhg qinit也可以,但该模式更受限制,特别是因为qpush会被重载)。这将创建一个位于.hg/patches内部的repo,它独立于主repo。然后,像往常一样使用mq。当您想提交您的补丁队列时,请使用hg commit --mq

您还可以使用--mq标志进行标记和分支,以跟踪不同的头。不幸的是,看起来书签扩展程序尚不支持mq,这将是很好的,因为您可能需要轻量级标签。如果您愿意,您可以为qbookmark设置一个别名,它只需添加-R .hg/patches,以便它可以操作补丁队列repo。

我自己没有广泛使用过这个,但看起来足够多的本地Mercurial命令支持--mq,使其成为您的可能解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接