情景: 我接手了一个由Mercurial保存的程序,只有在对某些已检入文件进行特定修改后才能在我的系统上运行。我不想将这些修改检入。
解决办法是创建一个Mercurial补丁文件(hg diff > patchfile),其中包含这些修改; 在需要提交更改时,我将反向应用该补丁,提交并重新应用该补丁。(如果我完全控制源代码,我会将所有这些小的修改移动到一个不受版本控制的单个配置文件中,在版本控制下放置一个“示例”配置文件)
不幸的是,虽然GNUpatch
命令支持--reverse
标志,但它不支持hg的多文件diff格式作为单个补丁文件(或许它支持,只是我不知道它的开关?)。另一方面,hg有自己的patch
命令可以应用差异,但它不支持任何类型的reverse
标志。
所以我的问题有两个:
- 在Mercurial中应该如何处理此类情况?肯定保留“调整补丁”不是唯一的方法。也许Mercurial有一个插件或内置功能来处理这种临时的不可提交更改。
- 除了应该如何处理之外,是否有任何方法可以将这样的Mercurial差异补丁反向应用到像这样的Mercurial存储库中?还有其他情况下会用到这种功能。
qpop
补丁,因为存储库中有本地更改。除非我漏掉了什么,否则这似乎是一个阻碍解决问题的难题。 - eternicodehg commit
提交一个补丁,但是你可以使用hg qfinish
完成它。 - robert.hg/patches/series
文件中交换它们的顺序,这似乎很好地解决了问题(尽管整个过程仍然感觉非常手动)。当然,如果第二个补丁的更改依赖于第一个补丁的更改,那么你需要小心处理这个问题,但在我的情况下,它们并没有相互依赖。 - eternicode