/wp
子目录。git checkout 3.4.1
(其中3.4.1
是标记)。.hgsubstate
中被捕获得很好)。这里麻烦开始了。我做hg push
,当它到达WP:
no branch checked out in subrepo wp
cannot push revision e9bc63e25dc40c07ac3a6778dc2b48e1aa486e36
然后就退出了。甚至没有尝试推送根目录。
我理解为什么Mercurial 尝试推动subrepo(预期的行为),但我无法理解为什么它设法完全失败,因为:
如何理解我想要这个特定的修订,我不想让它搞乱Git subrepo?
答案 0 :(得分:2)
这个设置会遇到一些问题。
首先,似乎 mercurial无法使用分离的HEAD处理git子目录。
执行git checkout 3.4.1
时,您的仓库进入detached HEAD状态(执行命令时应该会看到相应的警告)。此时,如果您运行git branch
,则会看到(no branch)
被列为活动分支。当mercurial试图推动时,它会扼杀这种状态。您可以问mercurial developer list为什么会发生这种情况,但这可能是对现有子实施的限制。
其次, mercurial使用push命令同步git subrepos 。
如果你要运行git checkout -b <integration_branch> 3.4.1
,它会将git移出分离的HEAD状态。但是,当您尝试hg push
时,它将尝试实际推送到远程git仓库。对于mercurial subrepo,它可以检查传出更改,即使您没有对远程的推送访问权限。但是,GitHub要求您在进行身份验证之前告诉您两个repos是否已同步。所以,如果你没有对git遥控器的推送访问权限,那么这将失败。这是mercurial的subrepo策略设计的一部分。
如果您需要继续此设置,则应该执行以下操作:
git checkout -b <branch_name> 3.4.1
此related question中还有一些其他信息。