首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何交换存储库内外的Mercurial队列

如何交换存储库内外的Mercurial队列
EN

Stack Overflow用户
提问于 2009-06-09 15:10:32
回答 3查看 1.9K关注 0票数 9

我有一个平台中立的汞代码回购,叫做“模拟器”。

并希望在构建之前应用针对特定平台优化的修补程序。

根据指南,我们可以通过使用带护卫的补丁来实现这一点。

  • Windows Experimental.patch +windows
  • Unix Experimental.patch +unix
  • Mac Experimental.patch +mac

但是,它开始变得很麻烦了,因为我们的补丁队列包含了名为windows-memory- 100+ +windows、unix-memory-Optimization.补丁+unix、windows-io-实验性-bug-unix +windows等补丁。我们将其组织为系列文件中的组,但是文件变得越来越大,使用qseries / qapplied变得难以管理。

相反,我们希望有一个窗口、unix和mac的队列。

这样就可以将补丁组织为:

  • Windows修补程序栈:内存-opt.修补程序、io-opt.修补程序等
  • Unix堆栈: disk.patch、graphics.patch等
  • Mac修补程序栈:io- etc .补丁、io-opt.补丁、experimental.patch等

然后将每个平台的补丁堆栈交换到模拟器回购系统的内部和外部。这样我就可以处理windows补丁栈和pop/push各种子系统优化补丁,并独立于unix或mac修补程序栈对它们进行处理。

看起来我无法做到这一点,除了为每个平台做出3种不同的repos并以这种方式维护补丁堆栈之外。

除了手动复制repo中的..hg/修补程序目录之外,还有其他方法来完成“交换”修补程序栈吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-09 15:48:02

对Mercurial队列的有趣使用:)

我在这里假设您已经在某个地方对您的mercurial队列进行版本化。如果您不/对于那些不知道如何做到这一点的人,请看一看hgbook的相关部分:这是一种在不应用补丁的情况下以增量方式协作/保存您的工作的好方法。

三个命名分支

应该可以在MQ存储库中维护三个不同的命名枝,每个平台一个。

要切换平台,只需切换活动分支即可。

(与alias mq='hg -R $(hg root)/.hg/patches')

首先创建一个windows分支:

代码语言:javascript
复制
$ mq branch windows
marked working directory as branch windows

已经创建,但还没有提交。

做一些事情,添加补丁:

代码语言:javascript
复制
$ hg qnew windowspatch
... do some stuff

刷新、pop和提交:

代码语言:javascript
复制
$ hg qref
$ hg qpop -a
$ mq ci -m 'new windows branch'

您现在拥有默认的分支和新的windows分支:

代码语言:javascript
复制
$ mq branches
windows                       65:5fd4ef0b96c9
default                       64:06c1a56a3c08 (inactive)

现在创建一个Unix分支.

首先切换回基本默认分支:

代码语言:javascript
复制
$ mq up default
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

创建一个新的unix分支并添加一个特定于unix的修补程序:

代码语言:javascript
复制
$ 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)

用法

在对mq repos进行操作之前不要忘记使用qpop -a ..。

推送所有的窗口补丁

代码语言:javascript
复制
$ mq up windows
xx files updated, yy files merged, zz files removed, ww files unresolved
$ hg qpush -a

三次物理恢复

维护三个单独的(mercurial队列)分支看起来有点吓人。如果是这样的话,您可以只使用三个不同的MQ存储库:每个平台一个,每个版本在不同的地方进行。

例如:

代码语言:javascript
复制
$ cd mqs
$ hg qclone mq-windows windows
$ hg qclone mq-unix unix
$ hg qclone mq-mac mac

要在不同的平台上工作,只需切换文件夹(repos)。这一概念类似于第一种方法。但是,与其在一个MQ回购中使用三个内部分支,不如使用三个单独的MQ repos。

票数 17
EN

Stack Overflow用户

发布于 2009-09-05 00:23:17

若要为"mq“创建等效的Windows别名,请在与"hg.exe”相同的目录中创建一个批处理文件(例如,"C:\Program \TortoiseHg“),将其命名为"mq.cmd",并粘贴以下代码:

代码语言:javascript
复制
@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
票数 5
EN

Stack Overflow用户

发布于 2010-11-21 20:30:42

我知道这个问题很古老,但也许有人会对此感兴趣,知道还有另一个解决办法。我认为在问题被问到的时候,这是不可能的,但是这里有更多关于这种情况的信息:MQ上的多个补丁队列

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/970669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档