Python 如何检查钩子中的rebase提交?

Python 如何检查钩子中的rebase提交?,python,mercurial,hook,rebase,Python,Mercurial,Hook,Rebase,下面是我提交消息的钩子,它可以很好地用于手动完成的所有合并和提交。当我试着使用它的时候,不要说 “此分支仅用于合并提交,不能在此处直接提交代码” 它直接将代码提交到默认值。这不是合并吗 钩子的需要是避免任何直接提交到默认分支的操作,并且只应该提交到特性分支(默认分支以外的其他分支)。此外,如果分支中没有遵循正确的命名约定,它将失败 请让我知道我如何允许再基础提交,或者如果我在钩子上丢失了任何东西 重新导入 def提交消息(用户界面、回购、*args、**kwargs): changectx=re

下面是我提交消息的钩子,它可以很好地用于手动完成的所有合并和提交。当我试着使用它的时候,不要说

“此分支仅用于合并提交,不能在此处直接提交代码”

它直接将代码提交到默认值。这不是合并吗

钩子的需要是避免任何直接提交到默认分支的操作,并且只应该提交到特性分支(默认分支以外的其他分支)。此外,如果分支中没有遵循正确的命名约定,它将失败

请让我知道我如何允许再基础提交,或者如果我在钩子上丢失了任何东西

重新导入
def提交消息(用户界面、回购、*args、**kwargs):
changectx=repo[kwargs['node']]
如果changectx.branch()==“默认值”:
如果kwargs['parent2']='':
如果changectx.rev()==0:
返回0
tagsfilepresent=0
totalfiles=0
对于changectx.files()中的文件:
totalfiles=totalfiles+1
如果文件=='.hgtags':
tagsfilepresent=1
如果totalfiles==1且tagsfilepresent==1:
返回0
ui.write(changectx.branch()+'此分支仅用于合并提交,无法在此处直接提交代码\n\n')
返回1
secondarybranchname=repo[kwargs['parent2']].branch()
write('将'+secondarybranchname+'合并为默认值\n')
ui.write('Merge Commit Successful to default for ticket:'+secondarybranchname[1:]+'\n')
返回0
m=re.match(“^t(\d{4,5})$”,changectx.branch()
如果m:
ui.write('Commit Successful to'+m.group(1)+'\n')
返回0
其他:
ui.write('分支名称不可接受,应为默认名称或t(数字)\n')
返回1
ui.write('如果您认为此特殊情况未在此处处理,请通知'+'\n')
返回1
似乎清楚地显示了发生了什么

重基不是合并(不是
hg merge
)。如果是,为什么要重设基础,为什么不合并?实际上,在大多数情况下,它更接近于使用修补程序队列从它们的位置进行一些修改并移动到另一个父级。对于修订历史记录,看起来您在新的父项上剥离了几个修订并提交了其他修订(非常相似,但实际上并不相同)。这就是为什么
kwargs['parent2']=''
是正确的

要想知道历史到底发生了什么,你最好仔细阅读这本书

该操作涉及合并更改,以解决原始父级和目标父级之间的冲突。这就是当修补程序队列无法帮助时使扩展可用的原因:如果修补程序中的任何大块内容与目标文件内容不完全匹配,则无法通过队列应用修补程序。但它只与文件内容有关,而与历史无关。毕竟,TortoiseHg还可以在更新操作期间合并本地更改,但它不是“hg合并”

因此,重定基址与您禁止向“默认”分支提交的策略相矛盾,如果它停在这里,您似乎有一个相当好的钩子。我认为您应该使用常规的merge命令来对分支进行更改