我正在使用TortoiseHg和SVN存储库使用hgsubversion扩展。
我喜欢在拉动时使用hg pull --rebase
来反映SVN在svn update
上所做的。因为我使用的是 hgsubversion,所以我在推送之前无论如何都需要变基,所以我不妨一步到位。
此外,hg push
会自动在内部进行变基,但无法解决这个问题。
我的困难在于,如果我有任何未承诺的更改,hg rebase
会拒绝工作。因此,要从SVN推送或拉取,我总是需要先hg shelve
,然后再记住hg unshelve
。这可能会变得非常烦人,我总是忘记。
理想情况下,我想告诉 TortoiseHg 自动为我执行此操作,但我会满足于命令行别名。我尝试按照此处的建议在我的配置中放置一个像 svnpull = !hg shelve && hg pull --rebase && hg unshelve
这样的别名,但我收到错误"用户:中止:预期响应",而不是被要求输入我的密码。如何避免每次与中央存储库交互时手动搁置/取消搁置步骤?
我实际上不能在本地提交我的更改,只是避免推送本地更改,因为 hgsubversion 不尊重秘密阶段,并且 hgsubversion 不支持指定要推送的修订版。所以不幸的是,这个类似问题的答案都不适合我。无论如何,我需要手动步骤来安排我的"仅限本地"变更集始终在提示上。
解决方案是使用存储库钩子。我将其添加到我的 .hg/hgrc 配置文件中:
[hooks]
pre-pull = hg shelve
post-pull = hg unshelve
pre-push = hg shelve
post-push = hg unshelve
不要手动输入密码,使用密钥环(在Windows上可疑)或使用项目.hgrc中的[auth]
部分自动输入密码
来自远程SVN后端的本地hg存储库的示例
[auth]
assembla.prefix = https://subversion.assembla.com
assembla.username = USER
assembla.password = PASSWORD
并且不再需要输入密码
另一个想法:你没有立即推动你的WIP,是吗?你只需要把它放在"其他"工作之上,对吗?在这种情况下,您可以提交、变基并继续使用相同的tip
,并使用commit --amend
对其进行修改