我必须在mercurial存储库中维护的代码库上运行十几个不同的构建测试。我不想在同一个存储库上连续运行这些测试,因为它们修改了一组公共文件,我想在不同的机器上并行运行它们。此外,在运行所有测试后,我希望能够访问这些测试工作区域的最新测试结果。目前我正在克隆主存储库十几次,并在每个克隆中运行一个不同的测试。在每次测试执行之前,我会执行拉/更新/清除准备序列,以便在最新的清洁状态下开始测试。这对我有好处。
我也正在准备使用mq扩展的新更改,我将在提交它们之前对所有克隆进行测试。为了测试一些准备好的候选mq补丁,我想以某种方式部署/同步它们以便在测试克隆中可用,并在运行测试之前使用一些防护应用那些准备进行测试。
之前有人做过同步吗?最简单的方法是什么?我需要有版本化的mq补丁吗?
答案 0 :(得分:7)
hg qinit -c
您可能仍然可以通过
创建补丁回购cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"
但我个人从未尝试过。
然后.hg / patches可以像任何其他mercurial存储库一样对待。所以我认为你可能会推出一些shell脚本。进入克隆回购的.hg目录并做一个
hg clone http://centralrepo.com/patch_repo ./patches
答案 1 :(得分:2)
这是我实施的解决方案。几个笔记:
master
dir clone-x
dirs 以下是步骤(有些可能是可选的):
一次:使用mercurial在版本控制下将补丁放入主存储库中:
一个。 hg -R master init --mq
#no commit在这里发生,可以在以后完成
湾hg -R master commit --mq --addremove --message 'initial patch queue'
#使克隆repos可见
对于每个克隆,克隆创建完成后:假设克隆上尚未创建补丁,请初始化mq子存储库:
一个。 hg clone master\.hg\patches clone-x\.hg\patches
湾hg -R clone-x qselect ready_for_testing
在master中准备好每个更改(在mq repo中创建/导入补丁):在启动测试之前执行此操作:
一个。审查/更新mq补丁的保护:包含在测试中的那些应该是无人看管的或者+ ready_for_testing
湾hg -R master commit --mq -A
#使克隆repos可见
对于每个克隆,对于每个克隆的每个[测试]迭代:在运行实际测试之前执行此准备序列:
一个。 hg -R clone-x qpop --all --force
湾hg -R clone-x pull
C。 hg -R clone-x update --clean
d。 hg -R clone-x purge --all
即hg -R clone-x pull --mq
F。 hg -R clone-x update --mq
G。 hg -R clone-x qpush --all
答案 2 :(得分:1)
从Mercurial 1.5版开始,您可以使用以下命令在现有的Mercurial仓库中创建补丁队列存储库:
hg init --mq
发出该命令时排队补丁是可以的。