挂钩以限制一次仅推入一个分支

问题描述

我尝试创建一个钩子,如果您尝试多次推送分支,则该钩子将阻止推送到远程存储库。 这是钩子:
#!/bin/bash

HG_EXE=\"/opt/csw/bin/hg\"
CHANGESETS=`${HG_EXE} log -r $1:tip --template \'{node} \'`

i=0
for changeset in ${CHANGESETS}
do
       BRANCH=`${HG_EXE} log -r ${changeset} --template \'{branches}\'`

       if [ \"${BRANCH}\" == \"\" ]
       then
              BRANCH=\"default\"
       fi
       BRANCHES[$i]=${BRANCH}
       i=$i+1
done

items=${#BRANCHES[*]}
if [ $items -gt 1 ]
then
       i=0
       while [ \"${BRANCHES[${i}+1]}\" != \"\" ]
       do
              if [ \"${BRANCHES[${i}]}\" != \"${BRANCHES[${i}+1]}\" ]
              then
                     echo \"ERROR: You are trying to push more than one branch,use     \\\"hg push -b [branch_name]\\\"\"
                     exit 1
              fi
       i=$i+1 
       done
fi
问题: 如果我已承诺在两个分支机构:
changeset:   58:8d2bebe08dd9
user:        keshurj <Jay.Keshur@monitisegroup.com>
date:        Thu May 26 16:36:49 2011 +0100
summary:     commit on default

changeset:   59:43be74e39a44
branch:      branch1
tag:         tip
user:        keshurj <Jay.Keshur@monitisegroup.com>
date:        Thu May 26 16:40:25 2011 +0100
summary:     commit on branch1
并尝试使用hg push –b branch1进行推送,该钩子仍将$ {HG_NODE}视为8d2bebe08dd9,这是默认设置。 是否有任何方法可以确保通过远程挂钩一次只推送到一个分支? 公开接受所有建议(re:此工作流程:))     

解决方法

        您是否考虑过仅使用
hg nudge
之类的别名: http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/ 这只是:
[alias]
nudge = push --rev .
这样可以确保您仅推送当前的父修订版及其祖先。鉴于您上面脚本中的假设,这些代码可能全都在同一个分支中(或要求将其推送)。您需要养成新习惯,但这很直接。     ,        运行脚本时未定义分配给
$CHANGESETS
的-4ѭ-将其替换为
$HG_NODE
http://www.selenic.com/mercurial/hgrc.5.html#hooks 假设您将其作为pretxnchangegroup挂钩运行。 (使用hg 1.8.1进行了测试,但是我可以肯定地说,最近没有改变)。     ,        原来我在做些愚蠢的事情。变更集58是变更集59的父级。 谢谢你们。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...