git相当于hg mq?

我刚开始使用Git和Mercurial一起熟悉Git。

我广泛使用Mercurial中的mq扩展来pipe理本地补丁,我正在寻找一个Git等价物。

我应该只使用Git分支? 还是有更好的方法来pipe理本地修补程序,可以轻松应用和删除修补程序?

谢谢,

查看Git Wiki上的接口,前端和工具页面的“修补程序pipe理接口层”部分。 列出了两个补丁pipe理界面,大致相当于Mercurials的mq 扩展

  • StGIT (Stacked Git)是用Python编写的两个较老的版本,它使用两个快照来表示补丁
  • Guilt (以前的“gq”)写成一连串的bash脚本,系列文件和补丁(每个文件一个)都以纯文本文件forms存储。
  • pg(Patchy Git)已被弃用 ,不再维护。

但是如果你不需要更高级的用法,你可以使用“ git rebase –interactive ”来重新sorting,压缩和分割补丁。 而要pipe理你的分支与当前版本的上游,“git rebase”通常就足够了。

免责声明:我不是hg用户,所以我已经阅读了有关hg,但没有太多第一手的使用经验。

git提供了几个非常强大和灵活的工具来pipe理“修补程序队列”风格的分支,所以对于许多基本的(甚至是一些相当复杂的)用例,native git足够强大。

通常情况下,大多数项目保持一个中央稳定的主分支,只获得新的提交,永远不会“倒退”,因此在主分支中的提交是固定的。

除此之外,维护人员(或开发人员)可以维护基于稳定分支的一个或多个stream程分支(即提交)。

典型的补丁pipe理活动包括:

将修补程序队列重新分配到最新的稳定分支 – 使用git rebase

将补丁队列复制到旧的maintentance分支 – 使用git branchgit rebase

重新排列队列中的补丁 – 使用文本编辑器重新排列队列,使用git rebase --interactive (又名git rebase -i )。

压扁补丁 – 用squash指令使用git rebase -i

修改补丁或补丁提交信息 – 使用编辑指令使用git rebase -i (发现主题?)。

任何以任何方式(即其内容,描述或出身)修改修补程序的活动都将为该修补程序创build一个新的提交ID。 旧的提交可能会被抛弃,并在被提升到稳定的主分支之前被定期更换,这是唯一使它们成为“补丁队列”而不是分支的东西,但这是一个项目约定,而不是任何物理差异在构成提交的数据中。 为了git他们是相同的对象。

要将补丁升级到“真正的”提交,只需将补丁移动到队列前面并将其合并到主分支中即可。 在将补丁移动到队列前面之后,它与基于主分支的正常提交相同,所以合并它只是快速转发主分支指针以指向补丁提交。

将这个提交作为一个“稳定的”主修补程序发布是这样的行为:现在这是一个不会改变的提交,并且是项目不可变历史的一部分。

只需使用一个分支,并定期对上游分支进行重新分配。 这比使用mq(过去我丢失了数据)更容易pipe理和更安全。

Git本身并不提供这个function。 根据您的使用情况,您可以通过“git stash”和/或分支来获得,但这将是非常基础的。 如果人们使用git有更高级的补丁pipe理需求,他们似乎转向Quilt或StGit:请参阅http://git.or.cz/gitwiki/PatchManagement