使用 hgsubversion 推拉,无需手动搁置步骤

Pushing and pulling with hgsubversion without manual shelve step

我在使用 hgsubversion 扩展的 SVN 存储库中使用 TortoiseHg。

我喜欢在拉取时使用 hg pull --rebase,以反映 SVN 在 svn update 上所做的事情。因为我使用的是 hgsubversion,所以在推送之前我无论如何都需要变基,所以我最好一步完成。

此外,hg push自动 在内部进行变基,没有办法解决。

我的困难是如果我有任何未提交的更改,hg rebase 将拒绝工作。因此,要从 SVN 推送或拉取,我总是需要先 hg shelve ,然后记得做 hg unshelve 。这真的很烦人,我总是忘记。

理想情况下,我想告诉 TortoiseHg 自动为我执行此操作,但我会接受命令行别名。我尝试在我的配置 as suggested here 中放置一个像 svnpull = !hg shelve && hg pull --rebase && hg unshelve 这样的别名,但我得到了一个错误 "user: abort: response expected" 而不是被要求输入我的密码。每次与中央存储库交互时,如何避免手动执行 shelve/unshelve 个步骤?

不能实际在本地提交我的更改并且只是避免推送本地更改,因为hgsubversion doesn't respect the secret phase and hgsubversion doesn't support designating a revision to push. So unfortunately none of the answers to this similar question对我有用。无论如何,我需要手动步骤来安排我的 "local only" 变更集始终处于顶端。

不要手动输入密码,使用密钥环自动输入(Windows 有疑问)或使用 project's .hgrc

中的 [auth] 部分

来自我本地 hg-repo 的示例,用于远程 SVN-backend

[auth]
assembla.prefix = https://subversion.assembla.com
assembla.username = USER
assembla.password = PASSWORD

不再需要输入密码

另一个想法:你没有立即推出你的 WIP,是吗?您只需将它放在 "other" 工作之上,对吗?在这种情况下,您 可以 提交、变基并继续使用相同的 tip,用 commit --amend

修改它

解决方案是使用存储库挂钩。我将其添加到我的 .hg/hgrc 配置文件中:

[hooks]
pre-pull = hg shelve
post-pull = hg unshelve
pre-push = hg shelve
post-push = hg unshelve