Kwa*_*eng 9 mercurial mercurial-queue
我有一个平台中立的mercurial代码回购称为"模拟器"
并且希望在构建之前应用针对特定平台优化的补丁.
根据指南,我们可以通过使用带防护装置的补丁来实现这一目标.
然而它开始变得麻烦,因为我们的补丁队列包含100多个名为windows-memory-optimization.patch + windows的补丁,unix-memory-optimization.patch + unix,windows-io-experimental-bug-fix.patch + windows,我们把它组织成系列文件中的组,但文件变得越来越大,使用qseries/qapplied变得无法管理
相反,我们希望有一个Windows,unix和mac的队列.
这样补丁可以组织为:
然后将每个平台的补丁堆栈交换进出模拟器仓库.这样我就可以处理Windows补丁堆栈并弹出/推送各种子系统优化补丁,并独立于unix或mac补丁堆栈进行处理.
它看起来不像我能做到这一点,除了为每个平台制作3个不同的repos并以这种方式维护补丁堆栈.
有没有办法,除了手动复制.hg/patches目录进出仓库,以完成"交换"补丁堆栈?
Nic*_*zet 17
有趣的使用Mercurial队列:)
我在这里假设你已经在某个地方对你的mercurial队列进行了版本控制.如果你没有/那些不知道如何做的人,请看一下hgbook中的相关部分:这是一种很好的方式,可以在不应用补丁的情况下逐步协作/保存你的工作.
应该可以在MQ存储库中维护三个不同的命名分支,每个分支对应一个平台.
要切换平台,只需切换活动分支即可.
(带alias mq='hg -R $(hg root)/.hg/patches')
首先创建一个Windows分支:
$ mq branch windows
marked working directory as branch windows
Run Code Online (Sandbox Code Playgroud)
已创建,但尚未提交.
做一些事情,添加补丁:
$ hg qnew windowspatch
... do some stuff
Run Code Online (Sandbox Code Playgroud)
刷新,弹出和提交:
$ hg qref
$ hg qpop -a
$ mq ci -m 'new windows branch'
Run Code Online (Sandbox Code Playgroud)
您现在拥有默认分支和新的Windows分支:
$ mq branches
windows 65:5fd4ef0b96c9
default 64:06c1a56a3c08 (inactive)
Run Code Online (Sandbox Code Playgroud)
现在创建一个Unix分支.
首先切换回基本默认分支:
$ mq up default
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
Run Code Online (Sandbox Code Playgroud)
创建一个新的unix分支并添加一个特定于unix的补丁:
$ mq branch unix
marked working directory as branch unix
$ hg qnew unixpatch
... blahblah
$ hg qref
$ hg qpop -a
$ mq ci -m 'adding unix branch'
$ mq branches
unix 66:c51bb2c7b413
windows 65:5fd4ef0b96c9
default 64:06c1a56a3c08 (inactive)
Run Code Online (Sandbox Code Playgroud)
qpop -a在操作mq repos之前别忘了...
推送所有Windows补丁
$ mq up windows
xx files updated, yy files merged, zz files removed, ww files unresolved
$ hg qpush -a
Run Code Online (Sandbox Code Playgroud)
维护三个独立的(mercurial队列)分支看起来有点可怕.如果是这样,您可以使用三个不同的MQ存储库:每个平台一个,每个存储库在不同的位置进行版本控制.
例如 :
$ cd mqs
$ hg qclone mq-windows windows
$ hg qclone mq-unix unix
$ hg qclone mq-mac mac
Run Code Online (Sandbox Code Playgroud)
要在不同的平台上工作,只需切换文件夹(repos).这个概念与第一种方法类似.但是,不是在一个MQ repo中有三个内部分支,而是使用三个单独的MQ repos.
小智 5
要为"mq"创建等效的Windows别名,请在与"hg.exe"相同的目录中创建批处理文件(例如,"C:\ Program Files\TortoiseHg"),将其命名为"mq.cmd",然后粘贴码:
@echo off
FOR /F "tokens=1 delims=" %%A in ('hg root') do SET hgRoot=%%A
hg -R %hgRoot%/.hg/patches %1 %2 %3 %4 %5 %6 %7 %8 %9
Run Code Online (Sandbox Code Playgroud)