hib*_*lig 7 version-control mercurial branch hgsubversion
我正在尝试为使用Subversion的项目做出贡献.我使用Mercurial及其hgsubversion扩展来克隆repo.我的工作发生在一个功能分支上.
如何使功能分支与默认分支上发生的事件保持同步(hg说)又称主干(svn发言)?
所以我hg up feature以前更新到功能分支,然后hg pull在默认分支上给了我更改集.所以我做了hg merge default,承诺合并,然后尝试hg push将我的变更集发送到Subversion.而Mercurial说:"抱歉,找不到合并修订版的svn父版."
我终于想出了如何在问题中描述的事件之后取消我的存储库,这样我就可以继续工作而无需重新克隆父存储库(显然,当你执行时,这是一个非常慢的操作正在从Subversion中撤出!).如果Subversion的"提示"超出你的范围,你就不能再推了,只要确保你在Mercurial中通过$ HOME/.hgrc行激活了内置的"rebase"扩展名,如下所示:
[extensions]
rebase =
Run Code Online (Sandbox Code Playgroud)
然后,当您的存储库被楔入时,您应该能够运行此命令:
$ hg rebase --svn
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,它会解析你当前的分支,它已经让你离开Subversion HEAD,并在Mercurial中与"Subversion"中的HEAD对应的分支"tip"上重建它.从那里,你可以继续工作,并成功再次推动.到目前为止,它一直对我有用; 如果您遇到任何问题,请告诉我!
Mercurial 作为几种不同的分支模式:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
您所描述的一个是“命名分支”,当您使用仅通过 Mercurial(或 hg-git)访问的存储库时,这是最流行的。
但是,当您使用 hg-subversion 以便将更改推送到 subversion 或从 subversion 推送更改时(名义上只有分支),您最好将所有 Mercurial 更改保留在“默认”命名分支中,并使用“克隆和分支”模式(无论如何我更喜欢)。
具体来说,该消息Sorry, can't find svn parent of a merge revision.不是在 subversion 中直接匹配的修订版本的后代。
如果我是你,我会从 svn 重新克隆,然后使用“移植”命令(打包扩展)将我的工作移到该存储库的“默认”分支中。如果您想要与 hg-subversion 并行使用多个功能,请使用单独的克隆(它们非常便宜),因为它更符合 subversion 对分支的看法。