在以下情况下我使用mercurial补丁: -
您如何使用Mercurial Patch Queues?我觉得它是一个非常强大的Mercurial扩展,我并没有充分利用它。
答案 0 :(得分:7)
Mercurial wiki有一个good section用例:
总结:
答案 1 :(得分:4)
你真的不需要Mercurial补丁。如果您在拉动时有未完成的未更改的更改,它们将与提示合并。
C:\>hg init db
C:\>cd db
C:\db>echo >file1
C:\db>echo >file2
C:\db>echo >file3
C:\db>hg ci -Am codebase # Create a code base with 3 files.
adding file1
adding file2
adding file3
C:\db>echo a change >>file2 # Outstanding change to file2.
C:\db>hg st
M file2
此时我们将克隆数据库并提交我们可以提取的更改。
C:\db>hg clone . \db2
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
C:\db>cd \db2
C:\db2>echo a change >>file3
C:\db2>hg ci -m "file3 change" # Commit a change to file3.
回到原始数据库......
C:\db2>cd \db
C:\db>hg st # Still have uncommitted change
M file2
C:\db>hg pull \db2
pulling from \db2
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
C:\db>hg st # We have the new history, but haven't updated.
M file2 # file2 has uncommitted change.
C:\db>type file3 # file3 is unchanged.
ECHO is on.
C:\db>hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
C:\db>hg st # We've updated, and file2 *still* has
M file2 # uncommitted change.
C:\db>type file2
ECHO is on.
a change
C:\db>type file3 # But file3 now has committed change
ECHO is on. # that was pulled.
a change
所以,道德是,你可以拉动和更新,即使是未提交的更改。如果存在合并冲突,则也会发生正常的合并行为。
对于修补程序导出hg export <rev>
,将导出修补程序以供审核。
答案 2 :(得分:4)
在Bitbucket上创建补丁队列时,它会在右侧窗格中列出补丁队列的一些常见用法。他们的解释很好,直接回答了你的问题。它的引用如下。
开发您打算提交以进行上游审核的功能
因为补丁队列中的补丁可以 经过修改,它们提供了一种理想的方式 开发一个功能 历史跟踪的方式,但仍然 让您轻松融入 反馈
尝试添加新功能
补丁队列不会让你感到困惑 项目的历史,所以你可以安全 使用它们作为快速尝试的方法 一个想法,并保持其版本 控制,而不会弄乱你的 项目的历史失败 游览。如果你决定保留 实验,你可以轻松转一个 补丁队列成一套传统 Mercurial提交
维护其他项目的私人自定义
因为补丁队列不属于 项目的官方更改日志, 他们是保持私人的理想选择 上游的自定义 项目。例如,你可能 维护一个补丁队列 程序更好地与您的整合 公司的工作流程
长期分支
因为补丁队列很高 不稳定,他们的跟踪工作很差 您的来源的长期历史 码。出于这个原因,长期运行 分支,例如那些 对应产品发布,应该 保存在存储库中或命名 分支。
小组发展
补丁队列不跟踪合并 历史,这使他们变得贫穷 做团队发展的选择, 在哪里你真的希望看到什么时候 给定的一组功能被合并到 存储库。当有疑问时,你 应该坚持传统的叉子, 但掌握补丁的力量 队列会给你巨大的 灵活的工作流程,以及 为您提供极大的增强 协作能力。
答案 3 :(得分:1)
MQ是管理并发开发的绝佳工具。从我自己的answer:
中肆无忌惮的自我剽窃和自我推销3每个项目使用MQ和一个补丁(或多个连续补丁)。
- 优点:简单易行。
- 缺点:在切换和重建之后必须进行qrefresh;狡猾 如果没有项目则有风险 正交。
4每个项目使用一个MQ分支。
- 优点:超灵活且可扩展(针对并发数量) 项目)
- 缺点:切换和重建之前必须qrefresh和qcommit; 感觉很复杂。
答案 4 :(得分:0)
我使用MQ在大型Subversion存储库上进行开发,我不想使用hgsubversion或类似的东西进行签出。在我的工作文件夹中,启动一个新的.hg存储库和一个Mercurial补丁队列。我用HG跟踪svn修订版,并且我的补丁在最上面。每当我感觉要更新svn状态时,我都会弹出所有补丁,运行val f2 = lift2(f1)
val optionSum = f2(f2(option1, option2), option3)
,然后再次推送并刷新补丁。当我确信自己的系列可以提交时,可以逐个完成补丁。 (当前正在开发一个新的Subversion功能“ shelve”,但是每次尝试时,它都不能很好地起作用,因此我仍然使用该MQ方法。)